处理来自Promise.all的一系列承诺

时间:2018-01-17 18:16:01

标签: node.js promise es6-promise

我对承诺还是比较陌生,而我正在做的所有道路都引导我Promise.all(),但我不确定如何处理结果。

我有一些像这样的数据

let data = {
  "format_oid":["35474527960032","2595837960032"]
};

然后我将它传递给像

这样的函数

server.js

jobHandler.handle(data)
  .then((info) => {
    console.log(info);
  })
  .catch((err) => {
    console.error(err);
  });

jobHandler课程中我有

jobHandler.js

class Handler {
  // constructor etc
  handle(data) {
    return this.extract(data);
  }

  extract(data) {
    let request = data.format_oid.map( (releaseId) => {
      return this._getReleaseId(releaseId);
     });
     return Promise.all(request);
  }

  _getReleaseId(releaseId) {
    return new Promise( (resolve, reject) => {
      if (_hasRelease(releaseId)){
        resolve('yay');
      } else {
        reject('boo');
      }
    });
}

目前request将包含一系列承诺,例如[ Promise { <pending> }, Promise { <pending> } ]

我如何在 server.js 中处理这一系列的承诺?

1 个答案:

答案 0 :(得分:4)

一个承诺可以解决一个结果。 Promise.all()解析为一系列结果,每个承诺的一个结果就是承诺的原始数组,其顺序与承诺的顺序相同。

  

我如何在server.js中处理这个承诺数组?

aHandlerObject.extract(data).then(results => {
   // results is an array of resolved values
   // one for each call to this._getReleaseId(...)
}).catch(err => {
   // handle error here
});