Node.Js:异步 return 给出未定义
Node.Js: Async return gives undefined
我正在尝试制作一个 returns 用户余额的功能。但是,函数returnsundefined
。我已经检查了 Whosebug 上的所有解决方案,但我找不到解决方案。
Return 函数
async function checkBal(username) {
db.getConnection(async (err, connection) => {
if (err) throw (err)
let queryBal = `SELECT balance FROM user WHERE username = "${username}";`
connection.query(queryBal, async (err, result) => {
if (err) throw (err)
if (result.length != 0) {
const data = result[0].balance
return data
我调用的函数
app.post("/api/bet", urlencodedParser, async function(req, res){
ssn = req.session;
if (ssn.username) {
balance = await checkBal(ssn.username)
console.log(balance)
您需要 return 一个 Promise,它将在函数完成后 return 通过 resolve
传递数据
async function checkBal(username) {
return new Promise((resolve, reject) => {
db.getConnection((err, connection) => {
if (err) reject(err)
let queryBal = `SELECT balance FROM user WHERE username = "${username}";`
connection.query(queryBal, (err, result) => {
if (err) reject(err)
if (result.length != 0) {
const data = result[0].balance
resolve(data);
}
});
});
});
}
如果函数定义中没有 await
,则不需要在函数定义前加上 async
。
(另外你应该转义 username
因为你的代码容易受到 SQL Injections)
我正在尝试制作一个 returns 用户余额的功能。但是,函数returnsundefined
。我已经检查了 Whosebug 上的所有解决方案,但我找不到解决方案。
Return 函数
async function checkBal(username) {
db.getConnection(async (err, connection) => {
if (err) throw (err)
let queryBal = `SELECT balance FROM user WHERE username = "${username}";`
connection.query(queryBal, async (err, result) => {
if (err) throw (err)
if (result.length != 0) {
const data = result[0].balance
return data
我调用的函数
app.post("/api/bet", urlencodedParser, async function(req, res){
ssn = req.session;
if (ssn.username) {
balance = await checkBal(ssn.username)
console.log(balance)
您需要 return 一个 Promise,它将在函数完成后 return 通过 resolve
传递数据
async function checkBal(username) {
return new Promise((resolve, reject) => {
db.getConnection((err, connection) => {
if (err) reject(err)
let queryBal = `SELECT balance FROM user WHERE username = "${username}";`
connection.query(queryBal, (err, result) => {
if (err) reject(err)
if (result.length != 0) {
const data = result[0].balance
resolve(data);
}
});
});
});
}
如果函数定义中没有 await
,则不需要在函数定义前加上 async
。
(另外你应该转义 username
因为你的代码容易受到 SQL Injections)