每个循环完成后承诺完成

时间:2014-10-15 14:31:33

标签: javascript node.js promise bluebird

promise.each(function(obj){
    obj.doIntensiveWork()
    .then(function(){
        console.log("I AM FIRST")
    })
})
.then(function(){
    console.log("I AM SECOND")
})

让我们说doIntensiveWork()需要相当长的时间来实现。 "我是第二个" 会在"我是第一个" 之前被记录,因为each被解析为{{在每个obj上调用(但不满足)1}}。这是对的吗?

如果是,我该如何将其反转以确保" I AM SECOND" 仅记录 并在最后&之后#34;我是第一个" 登录?我正在使用Bluebird API

1 个答案:

答案 0 :(得分:3)

你是对的,因为每个人都不等待强化工作完成。您可以使用map函数“加入”所有密集型工作(不要忘记return

promise.map(function(obj){
    return obj.doIntensiveWork()
    .then(function(){
        console.log("I AM FIRST")
    })
})
.then(function(){
    console.log("I AM SECOND")
})