如何回调结果Mysql + Nodejs
我正在尝试从数据库中返回结果,根据我不得不使用回叫的某些文档,我正在尝试但结果仍然不确定,请帮助我
// app.js file
var db = require('./database');
var access_token;
db.page_access_token(page_id, function(err, content) {
if (err) {
console.log(err);
} else {
access_token = content;
console.log(access_token); // response conrrect
}
});
console.log(access_token); // response undefined
// database.js file
module.exports = {
page_access_token : function(page, callback){
conn.query('SELECT access_token FROM facebook_pages WHERE ?', {page : page}, function(err, row) {
if (err) {
callback(err, null);
} else
callback(null, row[0].access_token);
});
}
}
回答如下:数据库调用是异步的(完成执行需要时间)。您正在为回调中的access_token分配值,并且正在回调函数外部记录access_token变量。在这里,由于回调之外的console.log()在回调函数中的console.log()之前执行,因为它是异步操作,所以未定义access_token。如果您需要在回调之外使用access_token,请编写一个函数并将access_token作为参数传递给该函数。例如-
db.page_access_token(page_id, function(err, content) {
if (err) {
console.log(err);
} else {
access_token = content;
doSomeWork(access_token);
console.log("Access token in callback -->>"+ access_token);
}
});
function doSomeWork(acc_token){
console.log("Access token in doSomeWork -->>"+ acc_token);
}