[英]Promise Chain not waiting for promises to resolve before ending
我嘗試將這些簡化一些:
passData.savedDBGames.forEach((gameInfo) => {
return new Promise((resolve, reject) => {
stats.getPlayersStats(gameInfo.fixtureID).then((playerStats) => {
playerStatsPromise.push(playerStats);
console.info('Grab Done');
resolve();
});
});
});
Promise.all(playerStatsPromise)
.then(function () {
console.info('All Done');
app.io.emit('admin', 'Admin: done');
resolve(passData);
});
據我了解Promise.all
應該等到所有包含在承諾playerStatsPromise
已經解決?
那么,為什么“ All Done
在“ Grab Done
All Done
之前Grab Done
?
在構建數組playerStatsPromise
時,您似乎引用了未定義的變量data2
。 而是使用map
來構建您的數組,因為這將返回promise:
var playerStatsPromise = passData.savedDBGames.map((gameInfo) => {
return new Promise((resolve, reject) => {
stats.getPlayersStats(gameInfo.fixtureID).then((playerStats) => {
console.info('Grab Done');
resolve();
});
});
});
Promise.all(playerStatsPromise)
.then(function () {
console.info('All Done');
app.io.emit('admin', 'Admin: done');
resolve(passData);
});
如果這是您在第一個代碼塊中所做的全部操作,則可以簡化為:
var playerStatsPromise = passData.savedDBGames
.map(gameInfo => stats.getPlayersStats(gameInfo.fixtureID));
Promise.all(playerStatsPromise)
.then(function () {
console.info('All Done');
app.io.emit('admin', 'Admin: done');
resolve(passData);
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.