异步 - 等待与Mongoose一起使用nodeJS

问题描述 投票:0回答:1

比较用户登录请求的密码。使用async并等待等到获得实际响应。

我希望它按照1,2,3,4的顺序运行(console.log的顺序)

但它执行为1,3,4,2。请帮助。

脚本不等待comparePassword

async login(request){
        let response =  await User.findOne({ email: request.email }, async (err, user) => {
            if (err) throw err;

            console.log('1');

            let isMatch =  await user.comparePassword(request.password, (err, isMatch) => {
                console.log('2');
                if (err) throw err;
                request.isMatch = isMatch;
            });

            console.log('3');
            return request;

        });

        console.log('4');
        console.log('response', response);
    }
node.js mongoose ecmascript-6 async-await
1个回答
2
投票

如果你使用async / await,你使用的是promises,你不能将回调传递给mongoose方法。如果你没有通过,他们将返回一个你可以await的承诺。你在找

async login(request){
    let response =  await User.findOne({ email: request.email });
    console.log('1');
    let isMatch =  await user.comparePassword(request.password);
    console.log('2');
    request.isMatch = isMatch;
    console.log('3');
    return request;
    console.log('4');
    console.log('response', response);
}
© www.soinside.com 2019 - 2024. All rights reserved.