2016-12-10 182 views
1

我是nodejs的新手,並且面臨sqlite選擇查詢的問題與nodejs和sqlite3同步的SELECT查詢

下面是我的代碼。

function parse(topic, msg, name) { 

    item = get_obj(tbl_name, handle, JSON.stringify(arg)) 

    // get item from database 
    return [handle, arg, item, action]; 
} 


function get_obj(tbl_name, handle, obj_str) { 

    let dbname = "test.sql"; 
    let query, ret; 
    let my_obj = {}; 
    let db = new sql.Database(dbname); 
    let str = "'" + obj_str + "'"; 
    query = "SELECT handle from " + tbl_name + " where object=" + str; 
    db.serialize(function(ret) { 
    let ret1 = db.each(query, function(err, row, ret) { 
     if (err) { 
      console.log("No records found"); 
     } else { 
      if (row.handle == handle) { 
       ret = JSON.parse(obj_str); 
      } 
     } 
    }); 
    }); 
    } 

我想我應該解析等到我跟get_obj()完成。在目前的情況下,我的解析立即返回。任何幫助表示讚賞。

回答

0

添加一個匿名函數您db.each功能:

let ret1 = db.each(query, function(err, row, ret) { 
     if (err) { 
      console.log("No records found"); 
     } else { 
      if (row.handle == handle) { 
       ret = JSON.parse(obj_str); 
      } 
     }, function (err, rows) {    <---- this one 
       parse(topic, msg, name) 
      }); 
    }); 

請記住,Node.js的功能是異步執行的。因此,您需要有一個回調函數,一旦db.each()完成後就會執行回調函數,從而保證回調函數僅在數據庫查詢完成後才執行。