我需要在承诺中转变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不能使用此代码
答案 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);
});