当所有使用bluebirdjs完成后,我如何顺序链接promises并获得结果?

时间:2017-04-05 09:14:15

标签: javascript parallel-processing promise bluebird es6-promise

类似的问题已被问到here,但我感兴趣的是,如果所有承诺都已完成,如何获得结果。

在我的代码中,我将文件安装到设备上 - 这需要按顺序完成,安装会创建一个承诺。

受上面的例子和example from BluebirdJS documentation的启发,我带来了以下代码:

  Promise.each(files, function(file, index){
    self.adbClient.install(device, file.path)
    .then(function() {
      console.log('%s installed on device %s', file.name, device)
    })
    .catch(function(err) {
      console.error('Something went wrong when installing %s on %s: '+  err.stack, file.name, device)
    })
  }).then(function() { console.log("All done"); })
  .catch(function(err) { console.log("Argh, broken: " + err.message); })

执行后我得到:

All done
first-file.apk installed on device LGV400d1d1a81d
second-file.apk installed on device LGV400d1d1a81d

如何在所有安装完成后获取所有完成消息?

1 个答案:

答案 0 :(得分:0)

根据正确文档http://bluebirdjs.com/docs/api/promise.each.html -

  

如果迭代器函数返回一个promise或一个thenable,那么在继续下一次迭代之前等待promise的结果

所以,这是一个添加return的简单案例,如下所示

 Promise.each(files, function(file, index){
    return self.adbClient.install(device, file.path)
 // ^^^^^^
 // rest of your code