在Javascript中从回调函数获取变量
所以我在node.js中编写了这个MySQL选择代码。我对js和回调函数非常陌生,如何从全局范围的回调中获取var在Javascript中从回调函数获取变量,javascript,mysql,node.js,scope,callback,Javascript,Mysql,Node.js,Scope,Callback,所以我在node.js中编写了这个MySQL选择代码。我对js和回调函数非常陌生,如何从全局范围的回调中获取varuId? 我之所以这么做是因为我的函数mysqlselect必须返回uId function mysqlselect(db, data) { let sql = `SELECT id, name FROM users WHERE name = '${data.uName}'`; db.query(sql, function (err, result) {
uId
?
我之所以这么做是因为我的函数mysqlselect必须返回uId
function mysqlselect(db, data) {
let sql = `SELECT id, name FROM users WHERE name = '${data.uName}'`;
db.query(sql, function (err, result) {
if (err) throw err;
let uId = result[0].id;
});
// I want to be able to return uId here
};
不能,因为
db.query
是异步的
但是,您可以返回一个承诺
,如下所示:
function mysqlselect(db, data) {
return new Promise((resolve, reject) => {
let sql = `SELECT id, name FROM users WHERE name = '${data.uName}'`;
db.query(sql, function (err, result) {
if (err) reject(err);
let uId = result[0].id;
resolve(uId);
});
});
};
然后您可以这样使用:
mysqlselect(db, data).then((id) => console.log(id));
试试这个:
function mysqlselect(db, data, callback) {
let sql = `SELECT id, name FROM users WHERE name = '${data.uName}'`;
db.query(sql, function (err, result) {
if (err) callback(err, null);
let uId = result[0].id;
callback(null, uId);
});
};
然后你可以这样称呼它:
mysqlselect(db, data, function (err, uId) {
if (err) throw err;
console.log(uId)
});
Javascript中对数据库的所有查询或对端点的请求等都是异步进程,这意味着它们不会在通常的执行过程中执行。相反,在您的案例中执行流程时,在数据库上完成查询并返回repsonse时,将调用这些回调 现在,您可以在这个场景中使用多种方法来处理变量,但是由于您希望在数据库查询之后立即访问变量,因此可以尝试以下方法 使用/
注意:如果您想返回此变量并尝试在某个地方访问它,您将无法执行此操作,因为
异步
函数将始终返回承诺。您必须等待异步函数的或执行。然后这是否回答了您的问题?
// YOU CAN USE AWAIT ONLY INSIDE AN ASYNC FUNCTION
async function mysqlselect(db, data) {
const uIdPromise = return newPromise((resolve, reject) => {
let sql = `SELECT id, name FROM users WHERE name = '${data.uName}'`;
db.query(sql, function (err, result) {
if (err) reject(err);
resolve(result[0].id);
});
})
// You can access uId right away here.
const uId = await uIdPromise;
};