gpt4 book ai didi

javascript - 为什么我的 bool 变量在路由中没有改变它们的值?

转载 作者:行者123 更新时间:2023-11-30 09:16:48 27 4
gpt4 key购买 nike

我只是为我的后端做一个获取路由,我无法弄清楚为什么我的变量 user 和 pass 在我 console.log 时仍然是假的。除了 findOne 之外,还有其他方法/函数可以检查用户名和密码是否正确吗?

app.get('/connect', (req, res) => {
let user = false;
let pass = false;
User.findOne({login: req.query.login}).then((currentUser) => {
if (currentUser)
user = true;
})
User.findOne({password: req.query.password}).then((currentPassword) => {
if (currentPassword)
pass = true;
})
console.log(user); //prints still false
console.log(pass); //prints still false
});

最佳答案

看来await就是解决办法。

如上所述,由于异步性质,它会触发这些请求并立即继续。这就是为什么你的控制台会打印 false,但在 N 次之后,它们实际上被改变了。

您可以通过以下方式将函数设置为异步:

async (a,b) => {}

如果您使用速记。然后,您可以说:await functioncall(); 对于您需要处理的 ant 异步调用。

请记住,如果您想等待某些东西,父函数需要是异步的。这才是真正的收获。

综上所述,假设您的代码如下:

app.get('/connect', async (req, res) => { // If you leverage await, you need to define parent function as async by a keyword.
let user = false;
let pass = false;
//you tell this function to wait until it has fully finished its promise chain.
await User.findOne({login: req.query.login}).then((currentUser) => {
if (currentUser)
user = true;
})
// Same as above
await User.findOne({password: req.query.password}).then((currentPassword) => {
if (currentPassword)
pass = true;
})
console.log(user); //now will print true.
console.log(pass); //now will print true.
});

我注意到上面的关键变化。

关于javascript - 为什么我的 bool 变量在路由中没有改变它们的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54575699/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com