即使我在查询之前定义了w_name
,我仍试图在查询之外获取变量w_name的值,但是在查询之后却无法获取它。请检查代码和帮助:
connection.query('SELECT * FROM workstations WHERE id=?',[results[0].w_id],function(err,res,field){
w_name = res[0].name;
});
console.log(w_name);
console.log
显示未定义,但如果我在console.log
之后将w_name
放入查询中,则显示正确的结果。怎么了?
答案 0 :(得分:0)
connection.query(...params)
是异步函数,需要一些时间来读取并获取传递给查询的结果数据。
定义console.log(w_name)
时打印未定义,因为结果尚未分配给w_name变量。而在回调函数中定义它会将值分配给w_name。
查看this文章以了解异步javascript。
connection.query('SELECT * FROM workstations WHERE id=?',
[results[0].w_id],function(err,res,field){
w_name = res[0].name;
console.log(w_name);
});
答案 1 :(得分:0)
NodeJs是异步的,它对结果使用回调。 据我所知,关于您的问题的最佳解决方案如下:
async function myQuery(){
return new Promise((resolve,reject)=>{
connection.query('SELECT * FROM workstations WHERE id=?',[results[0].w_id],function(err,res,field){
resolve(res[0].name)
});
})
}
现在,您可以使用then
来获取值,也可以使用async
await
来获取值。
//this is where you would like to call that function.
async function index(){
let w_name = await myQuery()
console.log(w_name)
}
答案 2 :(得分:0)
在这里您可以使用Promise()
和resolve()
查询结果。
const w_name = await new Promise(function(resolve, reject) {
connection.query('SELECT * FROM workstations WHERE id=?', [results[0].w_id], function(err, res, field) {
if (err) throw err
resolve(res[0].name);
})
});
console.log(w_name);