现在我正在研究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吗?
答案 0 :(得分:1)
看起来你可以用.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) {
});