【发布时间】:2016-12-16 05:05:22
【问题描述】:
我试着把这些简化一下:
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 之前完成呢?
【问题讨论】:
-
您的代码没有意义。
forEach尤其会引起副作用,但是您在其中返回了一个新的 Promise。 -
data2来自更大的承诺链。 @aaaaaa 我这样做是为了尝试强制返回一个 Promise,这只是我在试验。 -
如果你在其中使用了一个 Promise,你永远不应该创建一个
new Promise,你应该直接使用它们作为返回。此外,在getPlayersStats失败的情况下,您将破坏您的代码,因为您从不处理以getPlayersStats开头的链的拒绝情况。 -
是的,我真的需要写下我的捕获。谢谢:D
标签: javascript node.js promise