节点JS数据库回调

时间:2013-06-29 06:17:51

标签: node.js

我看到的与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(),因为我不知道每个循环何时完成?

1 个答案:

答案 0 :(得分: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()。< / p>

您也可以使用相同的function来关闭连接:

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