Как использовать модуль «q» для рефакторинга кода мангуста?

Я использую mongoose для вставки некоторых данных в mongodb. Код выглядит так:

<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>

Вы можете видеть, что там много вложенных обратных вызовов, поэтому я пытаюсь использоватьQ рефакторинг это.

Я надеюсь, что код будет выглядеть так:

<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>

Но я не знаю, как это сделать.

Ответы на вопрос(5)

Ваш ответ на вопрос