Я пытаюсь создать цепочку обещаний, которая возвращает результаты в порядке их вызова, поскольку это важно для моего приложения. Тем не менее, несмотря на ряд попыток, я испытываю затруднения, так как вывод 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});
});
. Я также попробовал следующий шаблон, но он просто возвращает [], так как обещание. Все не ожидают завершения обещаний, как предполагалось:
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});
});
ОБНОВЛЕНИЕ
Хотя на вопрос в том виде, в котором он был написан, дан ответ, теперь я понимаю, что принятый ответ не ждет возвращения каждого обещания, прежде чем следующеезапущен. Он отображает их так, чтобы вывод был в правильном порядке, но мне нужно, чтобы каждый вызов знал последние данные - как мне добиться этого кратко?