0

我在 nodejs 下看到的与数据查询相关的几乎所有内容都写入控制台,而不是从函数返回完整数据。

我正在努力检索查询的数据,这就是我现在所拥有的,但它什么也没返回:

function dbGet(req,res,cb){
    var sqlite3 = require('sqlite3').verbose();
    var db = new sqlite3.Database('/usr/share/csServ/csdb.sqlite');
    var json = []; var jrow = {};
    db.each("SELECT * from sensors", function(err,row) { jrow['id'] = row.id; jrow['tstamp'] = row.tstamp; json.push(jrow);}, cb(json) );
}

dbGet(req,res,function(json){
    console.log(json);
});

如何将数据放入我的回调中,以及如何在 dbGet() 函数中关闭 db db.close(),因为我不知道每个循环何时完成?

4

1 回答 1

1

如果你想cb(json)作为complete回调,你需要将它包装在另一个中function,以便它可以等待被评估:

db.each("SELECT * from sensors",
    function (err, row) { /* ... */ },
    function () { cb(json); }
);

cb(json)原样,当 时,它的值(当前)被立即调用json.length === 0,并且它的return值(当前undefined)被传递给db.each()

您也可以使用它function来关闭连接:

db.each("SELECT * from sensors",
    function (err, row) { /* ... */ },
    function () {
        db.close();
        cb(json);
    }
);
于 2013-06-29T06:21:35.457 回答