我需要在循环中执行一系列MySQL插入,然后在全部完成后执行一些操作。但是,我不确定将回调放在哪里 -
for (var q=0; q<things.length; q++)
{
thing
.create({
active_time: time
rule: rule
next: next_object,
percentage: object.percent,
enabled: 1,
})
.complete(function(err, newSchedule) {
console.log('thing added successfully');
})
}
我无法将其放在 .complete
部分中,因为它需要发生在所有这些部分之后。在继续之前我如何确保它们全部完成?
编辑:我已经开始使用 AsyncJS,但似乎 MySQL 查询将在完成之前回调。这是新代码:
if (valid) {
async.each(arrayOfObjects, tools.submitThing, function()
{
console.log("finished submissions")
});
和
exports.submitThing = function(thingObject, callback) {
thing
.create({
active_time: time
rule: rule
next: next_object,
percentage: object.percent,
enabled: 1,
})
.complete(function(err, newSchedule) {
console.log('thing added successfully');
})
callback();
}
服务器控制台显示消息“提交已完成”在 MySQL 插入之前注册。有什么办法可以解决这个问题吗?
最佳答案
您想要的是一个异步控制流库来处理按顺序执行异步函数循环。
查看 async
npm 模块 ( docs ),尤其是 async.eachSeries
函数。这将让您循环遍历所有事物
,并且对于每个事物
,逐一运行创建查询。当它们都完成插入时,您将在最后得到一个最终的回调函数。
关于javascript - MySQL 查询未按顺序执行 (NodeJS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21635277/