异步-等待无法在Mongoose上运行nodeJS

时间:2018-09-03 12:42:28

标签: node.js mongoose ecmascript-6 async-await

比较用户登录请求时的密码。使用 async and 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);
    }

1 个答案:

答案 0 :(得分:2)

如果您使用的是async / await,则使用的是Promise,并且不得将回调传递给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);
}