gpt4 book ai didi

node.js - 循环 Bluebird promise 的最佳方式是什么

转载 作者:太空宇宙 更新时间:2023-11-04 00:52:47 26 4
gpt4 key购买 nike

现在我正在使用 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) {
});

关于node.js - 循环 Bluebird promise 的最佳方式是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31587132/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com