在Promise / bluebird中按顺序执行命令

时间:2014-09-06 08:22:42

标签: node.js promise bluebird

我有一个数组需要附加到数据库,条件是,元素必须一个接一个地附加以使其工作,以下是我的代码,似乎命令不是按顺序执行,我的代码有什么问题:感谢。

var B = require('bluebird')
var appends = []

recs.forEach(function (item) {
   appends.push(dao.append_rec_cartAsync(item))
})

B.all(appends).then(function () {
    console.log('all done')
})        

1 个答案:

答案 0 :(得分:0)

当您致电dao.append_rec_cartAsync(item)时,您正在执行异步操作。一旦它开始,你就无法对它的运行做任何事情。另请注意,Promise.all不是按顺序执行,而是并行执行。

var B = require('bluebird');
B.each(recs, function(item){ // note we use B.each and not forEach here
     // we return the promise so it knows it's done
     return dao.append_recs_cartAsync(item);
}).then(function(){
    console.log("all done!")
});

或简而言之:B.each(recs, dao.append_recs_cartAsync)