【问题标题】:Howto wait for query execution on database?如何等待数据库上的查询执行?
【发布时间】:2015-07-09 21:46:56
【问题描述】:

我的代码是:

        jsonArray.forEach(function (that) {
            db.each(sql, function (err, row) {
            }, function (err, rows) {
                console.log("111");
            });
        });
        console.log("222");

运行第一次写入后是 222。 如何等待 db.each 写入 111 然后 222? 谢谢

已编辑:

console.log("222"); 在循环之后。

【问题讨论】:

  • 看看 async.js 和它的 eachSeries 函数
  • 为什么不能将该行放在回调本身中?我的意思是在 console.log("111"); 之后?
  • 嗨@Robin,console.log("222"); 在循环之后。
  • @hahamed 不,它不在循环之后,而是在循环之前。直到查询完成后才会发生循环。
  • 我编辑了我的代码。我希望 222 写在所有 111 的末尾。

标签: node.js sqlite callback


【解决方案1】:

为了确保在“111”之后记录“222”,您必须这样做:

jsonArray.forEach(function (that) {
    db.each(sql, function (err, row) {
    }, function (err, rows) {
        console.log("111");
        console.log("222");
    });
});

这是因为传递给db.each() 的第二个函数保证在数据库查询完成后被调用。由于数据库查询是异步执行的,因此您不能在启动查询后立即记录“222”并期望它在“111”之后可靠地显示。

现在,如果您真的希望在每个结果行中打印出“111”,您需要这样的内容:

jsonArray.forEach(function (that) {
    db.each(sql, function (err, row) {
        console.log("111");
    }, function (err, rows) {
        console.log("222");
    });
});

【讨论】:

  • 感谢@cybersam。但我编辑了我的代码。我希望 222 写在所有 111 的末尾。
  • 你所说的“所有“111”是什么意思?您应该只看到一个带有原始代码的“111”。请参阅我的更新答案,了解如何在每个结果行中看到“111”。
  • 111 正在循环中。我想在循环完成时写 222。我编辑了我的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-29
  • 2020-09-29
  • 1970-01-01
  • 1970-01-01
  • 2014-02-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多