我有一個node.js的JS sqlite3的控制器功能:爲什麼JS函數的控制sqlite3數據庫的執行順序不是一步一步的?
exports.findUser=function findUser(user){
var temp ;
var db = new sqlite3.Database('kitchen.db');
var stmt_user_find = "SELECT * FROM user WHERE un = ?";
db.all(stmt_user_find,user,save);
function save(err, rows) {
if (err) throw err;
console.log(rows);
temp = rows;
}
db.close();
return temp;
}
,並使用Express在路由器的另一個功能:
app.post('/login', function (req, res){
var un=req.body.un;
var pw=req.body.pw;
console.log('router '+db.findUser(un));
});
控制檯的結果是:
router undefined
[ { un: 'as', em: 'sss', pw: 'sss' } ]
第二個函數旨在從sqlite數據庫,但是控制檯的結果顯示'return temp'語句首先被執行並返回到第二個函數,然後執行findUser函數的內部函數(save)。那麼爲什麼它是這樣的,我怎樣才能從數據庫中獲得價值?
謝謝你,我已經在這個問題上試了幾個小時。
因爲它是異步的? – zerkms
是的,從sqlite文件,它是異步的,所以我怎麼能得到的價值....我在尋找答案 – Hope
他們在回調函數。你已經把它們放入'rows'變量中。 – zerkms