异步等待特快通话

时间:2018-06-25 12:46:35

标签: javascript async-await

我正在学习异步/等待,并尝试使用它修复代码,以便在服务器将数据发送回客户端之前,猫鼬查询不会及时返回。

查询用户名时,代码检查是否存在req.userId来登录用户,对其进行查询并设置_self变量,然后将数据发送回客户端

如何仅在完成对req.userId的猫鼬查询之后才将数据发送回去?

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仅在异步函数中有效”错误

1 个答案:

答案 0 :(得分:1)

这是您的代码

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 })
})

异步/等待用于解决承诺。 解析完成后,将返回异步函数的返回值,而不是使用等待来解析承诺。

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