每当我尝试从函数中获取返回值时,它都会返回未定义的值。
尝试回调, 尝试异步
let express = require('express');
let fs = require('fs');
let router = express();
let mysql = require('mysql');
const session = require('express-session');
router.use(session({
secret: 'something random.exe',
resave: false,
saveUninitialized: true,
cookie: {
expires: new Date(Date.now() + 7600000),
maxAge: new Date(Date.now() + 7600000),
}
}));
async function logins (username, password) {
mysql.createQuery("SELECT * FROM Users WHERE username = ?", [username], (err, rows) => {
return "test";
})
}
module.exports = {
login: async (request, response, username, password) => {
logins("username", "password", (getResponse) => {
return console.log(getResponse);
})
}
};
控制台始终返回未定义。
答案 0 :(得分:4)
调用logins
时会传递三个参数:
看看logins
的定义:
async function logins (username, password) {
它只对前两个两个参数起作用。
您的回调函数永远不会被使用。
重写logins
来调用它。
还请注意,您已将其标记为async
,但没有await
兑现任何承诺…所以这可能是一个错误。
答案 1 :(得分:0)
您似乎不了解async/await
关键字。当您尝试调用没有关键字await
的任何函数时,就会发生这种类型的问题。
格式错误
const userUtils = {};
userUtils.login = async () => {
try {
// Your business logic
} catch (err) {
console.log(err);
throw err;
}
};
userUtils.test = async () => {
try {
const result = userUtils.login();
console.log(result); // It will undefined
} catch (err) {
console.log(err);
throw err;
}
};
userUtils.test();
在上面的代码中,您将获得undefined
作为结果变量。
更正
const result = await userUtils.login();
在调用任何承诺时,别忘了写一个关键字await
。
注意:您仅在需要处理任何承诺时才能使用async/await
。它不能直接在回调函数上运行
错误的格式[等待回调]
userUtils.test = async () => {
try {
const result = await userUtils.login(args, (err, data) => {
if (err) {
console.log(err);
throw err;
}
return data;
});
console.log(result); // It will undefined
} catch (err) {
console.log(err);
throw err;
}
};
我希望它会有所帮助。快乐编码:)