我试图将这些简化一下:
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
之前完成?
答案 0 :(得分:2)
在构建数组data2
时,您似乎引用了未定义的变量playerStatsPromise
。而是使用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);
});