【问题标题】:how to know async method finish working?如何知道异步方法完成工作?
【发布时间】:2014-03-27 19:23:46
【问题描述】:

如何知道异步方法完成工作?我需要 console.log(resp) 中的所有对象,但结果我只得到 [] 一个空数组。

var sqlite = require("sqlite3");
var db = new sqlite.Database(process.cwd() + "/cb.db");
var resp = [];

db.serialize(function() {
    db.each("SELECT * from user", function(err, data) {
        var obj = {};
        obj.name = data.user;
        resp.push(obj);
    });
 console.log(resp); 
});

【问题讨论】:

  • sqliteDatabase#each 接受第二个回调函数complete,参数为function (err, rowCount)
  • 异步任务通常总是在完成时告诉你。 Jonathan Lonowski 知道在这种情况下会触发哪一个。
  • 感谢您的回答朋友,现在我找到了一条可以走的路。
  • @JonathanLonowski 谢谢先生拯救了我的一天。

标签: node.js asynchronous sqlite


【解决方案1】:

将您的 console.log 移动到 db 回调中

var sqlite = require("sqlite3");
var db = new sqlite.Database(process.cwd() + "/cb.db");
var resp = [];

db.serialize(function() {
    db.each("SELECT * from user", function(err, data) {
        var obj = {};
        obj.name = data.user;
        resp.push(obj);
        console.log(resp); 
    });
});

只要 db 调用完成,该函数就会运行。以前您在数据库读取完成之前运行您的 console.log,因此您的数据库结果不在您的数组中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-16
    • 1970-01-01
    • 2015-10-22
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多