javascript - 数据在函数中使用之前更改

标签 javascript node.js database sqlite node-sqlite3

我一直在尝试为数据库中的每张过期票证发送一封电子邮件。它的片段如下所示:

for (var i = 0; I < rows.length; ++i) {
    if (today > new Date(rows[i].end_date)) {
        (function(id) {
            db.exec('update tickets ' +
                    'set status="expired" ' +
                    'where ticket_id= ' + id + ';' +
                    'insert into changes ' +
                    'values(' + id + ',' +
                        '"system",' +
                        '"ticket expired",' +
                        '"' + (today.getUTCMonth() + 1) +
                        '/' + today.getUTCDate() +
                        '/' + today.getUTCFullYear() +
                    '");',
                    function(err) {
                        if (err) {
                            console.log(err);
                            return;
                        }

                        console.log(id);
                        sendAlert(id);
                    }
            );
        })(rows[i].ticket_id);
    }
}

正如您所看到的,我尝试使用匿名函数来防止每次调用中的数据发生更改,但它仍然不起作用。

我不知道我是否遗漏了一些东西。

最佳答案

看来这个任务的执行是异步的。当需要迭代异步调用时,不保证操作顺序。

也许您需要一些控制流库,例如 AsyncPromise 。即使在迭代中,也有一些方法可以控制这些流程。

关于javascript - 数据在函数中使用之前更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42256827/

相关文章:

javascript - 为什么 JavaScript/jQuery 注释中需要反斜杠后跟单引号

javascript - 使用node-twitter发推文时出现错误401

javascript - 使用 jquery 将我的内容加载到 div 后如何获得单独的链接?

javascript - 第二次 Nightmare 般的休息在for循环中运行

node.js - nodejs 重用同一服务器的最后一个 TLS 连接

javascript - Passport 本地 Mongoose 请求用户未定义

java - 删除时 SessionFactoryImpl#getReturnTypes 中的空指针异常

c# - 如何使用 DbParameter 将多个参数传递给 c# 中的参数化查询?

c# - 更新 MySQL 会返回受影响的行,但实际上不会更新数据库

javascript - 列表中最短的单词 - JS