Jak używać modułu „q” do refaktoryzacji kodu mangusty?

Używam mangusty do wstawiania danych do mongodba. Kod wygląda tak:

<code>var mongoose = require('mongoose');
mongoose.connect('mongo://localhost/test');
var conn = mongoose.connection;

// insert users
conn.collection('users').insert([{/*user1*/},{/*user2*/}], function(err, docs) {
    var user1 = docs[0], user2 = docs[1];

    // insert channels
    conn.collection('channels').insert([{userId:user1._id},{userId:user2._id}], function(err, docs) {
        var channel1 = docs[0], channel2 = docs[1];

        // insert articles
        conn.collection('articles').insert([{userId:user1._id,channelId:channel1._id},{}], function(err, docs) {
            var article1 = docs[0], article2 = docs[1];

        }
    });
};
</code>

Widać tam wiele zagnieżdżonych wywołań zwrotnych, więc próbuję użyćq refaktoryzować to.

Mam nadzieję, że kod będzie wyglądał tak:

<code>Q.fcall(step1)
.then(step2)
.then(step3)
.then(step4)
.then(function (value4) {
    // Do something with value4
}, function (error) {
    // Handle any error from step1 through step4
})
.end();
</code>

Ale nie wiem, jak to zrobić.

questionAnswers(5)

yourAnswerToTheQuestion