【问题标题】:MySQL queries not being executed sequentially (NodeJS)MySQL 查询未按顺序执行(NodeJS)
【发布时间】:2014-03-05 07:25:21
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    查看async npm 模块(docs),尤其是async.eachSeries 函数。这将让您遍历所有things,并为每个thing 一个接一个地运行创建查询。当它们都完成插入时,您将在最后得到一个最终的回调函数。

    【讨论】:

    • 我试过这个,但在我看来 MySQL 查询会立即开始操作和回调,即使它们还没有完成。是这样吗?
    • .complete 函数内部而不是在函数外部调用callback(),那么你应该很高兴。 .complete(function(err, newSchedule) { console.log('thing added successfully'); callback(); }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-08
    • 1970-01-01
    • 2014-07-30
    相关资源
    最近更新 更多