gpt4 book ai didi

javascript - 快速调用中的异步等待

转载 作者:行者123 更新时间:2023-12-03 01:37:01 26 4
gpt4 key购买 nike

我正在学习 async/await 并尝试使用它来修复代码中的错误,其中 Mongoose 查询在服务器将数据发送回客户端之前没有及时返回

当查询用户名时,代码会检查用户是否登录(如果 req.userId 存在),查询它并设置 _self 变量,然后将数据发送回客户端

如何仅在 req.userId 上的 mongoose 查询完成后才将数据发送回?

app.get('/:username', async function(req, res) {
User.findOne({ username: req.params.username })
.exec(function(err, user) {
.....
let _self = null;

if (req.userId != null) {
User.findOne({ _id: req.userId}, function(err, self) {
await _self = self.toObject();
});
}

return res.status(200).send({user: _user, self: _self })
})
})

我收到“SyntaxError:await 仅在异步函数中有效”错误

最佳答案

这是您的代码

app.get('/:username', async function(req, res) {
try{
var user = await User.findOne({ username: req.params.username })
.....
let _self = null;

if (req.userId != null) {
var self = await User.findOne({ _id: req.userId})
_self = self.toObject()
}
}
catch(err){
throw err
}
return res.status(200).send({user: _user, self: _self })
})

Async/Await 用于解析 Promise。使用await 代替回调来解析promise,一旦解析完成,就会返回异步函数的返回值。

findOne 是一个 aysnc 函数,因此await 应与findOne 一起使用。 toObject 是一个同步函数,因此不需要使用await

关于javascript - 快速调用中的异步等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51023837/

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