如何处理在我想要之前返回的asynchronous代码?

我有一个函数,其中包含代码…

db.query(query).then(results => { _.each(results, result => { db.query(anotherQuery).then( /* modify result based off anotherQuery results */ }); }); resolve(results); }); 

当然,正在发生的事情是resolve(results))正在被运行,同时第二个对数据库的请求正在运行,这意味着承诺不会在返回之前添加额外的数据。

有没有一种模式可以用来避免这种情况? 我正在使用Sequelize,它是由Bluebird for Promises支持的。 这是一个我曾经遇到过的模式,我已经看过使用wait.for,但它似乎已经过时,并且不支持Promise 。

你可以使用Bluebird提供的Promise.all函数:

 return db.query(query).then(results => { const promises = results.map(result => { return db.query(anotherQuery).then( /* modify result based off anotherQuery results */ }); }); return Promise.all(promises); });