什么是循环蓝鸟承诺的最佳方式

现在我正在使用NodeJS和Sequelize来查询和处理数据库数据。 我已经从Table1调用findAll,我想要查询每行应用一些数据到Table2然后我想在发送输出之前将所有数据添加到数组,我这样做

var last_promise; var output_results = {}; Table1Model.findAll() .then(function(results1) { for (var i = 0; i < results1.length; ++i) { var result1 = results1[i]; output_results[result1.id] = result1; var add_promise = Table2Model .create({ id_from_table1: result1.id, data_from_table1: result1.data }); .then(function(result2) { output_results[result2.id_from_table1].data2 = result2; }); if (last_promise) { last_promise.then(function() { return add_promise; }); } else { last_promise = add_promise; } } } } last_promise.then(function() { return output_results; } 

我想知道有没有更好的方法在这样的循环中按顺序执行promise?

它看起来像你可以用.all()方法做到这一点:

 Table1Model .findAll() .then(function(results1) { return Promise.all(results1.map(function(result) { return Table2Model .create({ id_from_table1: result1.id, data_from_table1: result1.data }) .then(function(result2) { ... }); })); }) .then(function(output_results) { });