实现Promise中的每个转换(不使用ASYC / AWAIT遗留代码)

时间:2019-05-08 18:03:54

标签: javascript node.js

我需要在承诺中转变forEach。该代码是旧版代码,我不能使用async / await运算符。

Promise.all(Object.entries(data).forEach(function (data) {
    let [data1, data2] = data
    let info;

    consultData.getResponse(data1).then(result => info = result).then(function () {
        return dataServices.find(info)
            .then(function (result) {
                // do things
            })
            .then(function (info) {
                // do final things
            })
    })
})).then((result) => {
        // do something when all things have intereted and finished
    })

但是输出Promise.all无法使用。如果我尝试使用Promise.resolve,则在所有内容完成处理之前先打印最后一个。

在所有迭代之后,我如何可以使用.then()来实现对forEach的转换?

ASYNC / AWAIT不能使用此代码

1 个答案:

答案 0 :(得分:0)

正如@Jonas Wilms指出的那样,您可以使用.map返回每个承诺,然后再使用Promise.all

const entries = Object.entries(data);
const arrayOfPromises = entries.map((item) => {
  return new Promise((resolve, reject) => {
    const [data1, data2] = item;

    consultData.getResponse(data1).then((result) => {
      return dataServices.find(info);
    }).then((infoServiceResult) => {
      return resolve(infoServiceResult);
    }).catch((err) => {
      return reject(err);
    });
  });
});

Promise.all(arrayOfPromises).then((data) => {
  // data is an array of each infoServiceResult
  console.log(data);
}).catch((err) => {
  console.error(err);
});