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