异步 - 等待 nodeJS 与 Mongoose 不工作

Tha*_*vam 0 mongoose node.js async-await ecmascript-6

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

我希望它按照以下顺序运行 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);
    }
Run Code Online (Sandbox Code Playgroud)

Ber*_*rgi 5

如果您使用async/ await,则您使用的是承诺,并且您不得将回调传递给猫鼬方法。如果你没有通过,他们会回复你可以的承诺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);
}
Run Code Online (Sandbox Code Playgroud)