如何知道异步方法完成工作?

时间:2014-02-25 14:00:57

标签: node.js asynchronous sqlite

如何知道异步方法完成工作?我需要在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); 
});

1 个答案:

答案 0 :(得分:0)

将您的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调用完成,该函数就会运行。以前您在db读取完成之前运行了console.log,因此您的数据库结果不在您的数组中。