MySQL查询没有按顺序执行(NodeJS)

时间:2014-02-07 18:36:18

标签: javascript mysql node.js asynchronous async.js

我需要在循环中执行一系列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插入之前注册。有办法解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

你想要的是一个异步控制流库来处理按顺序执行异步函数的循环。

查看async npm模块(docs),尤其是async.eachSeries功能。这将允许您循环遍历所有things,并为每个thing逐个运行创建查询。然后,当它们完成插入时,你将在最后有一个最终的回调函数。