我正在开发一个快速应用程序,并尝试在我的路线中使用asyn / await。现在,在我看来,似乎没有等待findOneUser调用返回,而是跳到下一行:
app.post ('/api/authenticate', async(req, res) => {
console.log('GET TO AUTHENTICAE')
const { email, password } = req.body;
const user_db = await users.findOneUser( email );
console.log("user_db", user_db)
return user_db
});
const findOneUser = (email) => {
console.log("email", email)
pool.query('SELECT * FROM users where email = $1', [email], (error, results) => {
if (error) {
throw error
}
console.log("RESULT", results.rows)
results.rows
})
}
这是我在终端中的日志,您可以看到在RESULT日志之前显示了user_db_log,但是我对async / await的理解是user_db代码应该已经等待user.findOneUser方法运行:
获取认证
发送电子邮件example@outlook.com
user_db
未定义
RESULT
[
{
id: 11,
first_name: 'Test',
last_name: 'User',
email: 'testuser@test.com'
}
]
答案 0 :(得分:2)
使用Promise
和async , await
app.post ('/api/authenticate', async(req, res) => {
console.log('GET TO AUTHENTICATE')
const { email, password } = req.body;
const user_db = await users.findOneUser(email);
console.log("user_db", user_db)
return user_db;
});
const findOneUser = async (email) => {
var myPromise = () => {
return new Promise((resolve, reject) => {
pool.query('SELECT * FROM users where email = $1', [email], (error, results)=> {
error ? reject(error) : resolve(results);
});
});
}
var result = await (myPromise());
return result;
}
答案 1 :(得分:0)
等待,直到承诺解决。
但是您的findOneUser
函数没有返回promise,因此等待立即执行然后返回。
因此,要使其工作,要么向您的findOneUser
函数添加async {向函数添加async将返回包装在promise中的响应},要么在同一函数内创建一个promise,然后返回包装在promise中的响应。