javascript - MySQL 查询未按顺序执行 (NodeJS)

标签 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 插入之前注册。有什么办法可以解决这个问题吗?

最佳答案

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

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

关于javascript - MySQL 查询未按顺序执行 (NodeJS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21635277/

相关文章:

javascript - Angular JS 阻止 Controller 在隐藏元素上运行

javascript - React JS 在 FileReader 内发生事件后不会改变状态

Mysql 多重左连接

node.js - 配置文件 .eslintrc 是否被弃用而支持 .eslintrc.* 文件?

node.js - 使用 Node.js 插入数据

javascript - 在 Twitter 上显示和隐藏内容

javascript - vanilla JS 的日期对象在 React.js 中可以正常使用吗?

mysql - 获取列不存在的表的名称

php - 根据另一个表的列值从一个表中选择一条记录

node.js - 如何修改最后一个 Restify 响应处理程序中的 res.body ?