我需要在循环中执行一系列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插入之前注册。有办法解决这个问题吗?
答案 0 :(得分:0)
你想要的是一个异步控制流库来处理按顺序执行异步函数的循环。
查看async
npm模块(docs),尤其是async.eachSeries
功能。这将允许您循环遍历所有things
,并为每个thing
逐个运行创建查询。然后,当它们完成插入时,你将在最后有一个最终的回调函数。