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 に答える