[英]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.