【发布时间】:2020-04-14 06:14:28
【问题描述】:
我正在尝试创建一个承诺链,它按照调用顺序返回结果,因为这对我的应用程序很重要。然而,尽管我进行了多次尝试,但由于输出 resultArray 回来时交换了一些数据点,这使得下游处理变得混乱,因此我仍在苦苦挣扎。这就是我目前拥有的(在
Promise.all(data.map( (dataPoint) => {
return new Promise( (resolve, reject) => {
doSomething(dataPoint).then( (result) => {
resultArray.push(result);
resolve();
});
})
})).then( () => {
res.status(201).json({"result": resultArray});
});
我也尝试过以下模式,但这只是返回 [] 作为 promise.all 似乎并没有等待承诺按预期完成:
let p = Promise.resolve();
data.forEach(dataPoint => {
p = p.then( () => {
getElevation(dataPoint, options).then( (result) => {
resultArray.push(result);
});
});
});
Promise.all([p]).then( () => {
res.status(201).json({"result": resultArray});
});
更新
虽然写的问题得到了回答,但我现在意识到接受的答案不会等待每个承诺在下一个启动之前返回。它确实对它们进行了映射,以便输出按正确的顺序排列,但我需要每次调用都了解最后一次调用 - 我如何简洁地实现这一点?
【问题讨论】:
标签: javascript node.js express promise