我有一个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