javascript - 如何在 promise 链内返回promise.map(bluebird)?

标签 javascript node.js asynchronous promise bluebird

我使用链来控制流程,并且无法在 step2() 中获取 Promise.map 来等待所有生成的 Promise 得到解析。

这是我想要实现的流程的视觉效果。

步骤1() 第2步() 第2步() 第2步() 第2步() 步骤3()

step2()中,我使用的是Bluebird的promise.map。

这是链条:

step1()
  .then(function() { return step2() }) 
  .then(function() { return step3() })
  .catch(function() { // handle errors })

这是我每个步骤的功能:

let step1 = function() {
  return new Promise(function(resolve, reject) {      
    // do stuff
    resolve()
  })
}

let step2 = function() {
  return new Promise(function(resolve, reject) {
    things = []      
    return Promise.map(things, function(thing) {
      // load file async with callback
    })
    resolve()
  })
}

let step3 = function() {
  return new Promise(function(resolve, reject) {      
    // do stuff
    resolve()
  })
}

我已经用更多步骤测试了该链,每个步骤都有一个超时,除了step2()中的promise.map之外,它按预期工作。我究竟做错了什么? :)

最佳答案

问题出在第2步。Promise.map已经返回promise,所以你可以将它返回给被调用者。然后,您可以通过 new Promise 的回调来扭曲异步函数。

let step2 = function() {
  things = []      
  return Promise.map(things, function(thing) {
    // load file async with callback
    return new Promise(function(resolve, reject) {
      fileAsyncFunc(thing, function callback(err, data) {
        if(err) {
          reject(err);
          return;
        }
        resolve(data);
      });
    });
  });
}

关于javascript - 如何在 promise 链内返回promise.map(bluebird)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40794138/

相关文章:

javascript - 在 javascript 或 typescript 中生成唯一的随机数

node.js - 可以通过for循环使用express.js创建许多app.get调用吗?

c# - 如何正确阻止方法直到对象计数器> 0?

javascript - 为什么 browser.wait 会导致 Protractor 无限期地等待异步任务

javascript - 有没有手动设置backbone模型不变的接口(interface)?

javascript - 为什么这个正则表达式在 Python 和 Javascript 中给出两个不同的结果?

javascript - 从动态div中获取当前文本内容

linux - Node.js:在同一目录中发送文件

node.js - PM2 集群模式 - 找不到模块 'dotenv/config'

javascript/nodejs : synchronously calling set of similar asynchronous functions on large, 分块数据集导致内存泄漏