我必须选择数据库中所有可用的标记,以便可以在函数中使用它们,但是在查询的回调函数中为变量分配值之后,不能使用变量,为什么呢?
代码不起作用:
let tags = [];
db.query(
`select * from tags`,
(err, results) => {
tags = results;
}
)
console.log(tags);
return;
但这有效:
let tags = [];
db.query(
`select * from tags`,
(err, results) => {
tags = results;
console.log(tags);
}
)
return;
但为什么?我想tags
在该查询后再次使用该变量,但是在查询后以某种方式销毁了分配给它的值。我要改变什么?
Javascript是异步语言,db.query
是一种异步的网络调用,因此,如果要使用查询的响应,则必须在执行db.query之后调用它。
在第一种情况下,console.log(tags);
run before db.query
被执行,您将获得undefined
响应。
在第二种情况下console.log(tags);
,在db.query
执行之后运行,这就是为什么要从查询中获取响应。
您可以通过Promise使用它:
async function queryExec() {
let tags = await promiseQuery(`select * from tags`);
console.log(tags);
return tags;
}
function promiseQuery(query) {
return new Promise((resolve, reject) => {
db.query(query, (err, results) => {
if (err) {
return reject(err);
}
resolve(results);
})
})
}
使用异步/等待:
async function queryExec() {
let tags = await db.query(`select * from tags`);
console.log(tags);
return tags;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句