2013-06-29 76 views
0

幾乎所有我看到的與nodejs下的數據查詢相關的東西都寫入控制檯,而不是從函數返回完整的數據。節點JS數據庫回調

我奮力檢索查詢的數據,這是我現在有,但它沒有返回值:

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); 
}); 

我怎樣才能獲得的數據爲我的回調,我怎麼可以關閉分貝db.close( )在dbGet()函數中,因爲我不知道每個循環何時完成?

回答

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); 
    } 
); 
+0

非常感謝,這解決了這個問題。 – crankshaft