Node.js 等待函数没有';t等待异步匿名函数

Node.js 等待函数没有';t等待异步匿名函数,node.js,mongoose,hapijs,Node.js,Mongoose,Hapijs,我尝试使用wait使我的异步函数像同步任务一样工作,它适用于常规函数。但这对我的匿名函数不起作用 所以我在mongoose模式中有一个函数: userSchema.methods.comparePassword=函数comparePassword(candidatePassword,cb){ bcrypt.compare(candidatePassword,this.password,(err,isMatch)=>{ cb(err,isMatch); }); };尝试将其分配给承诺,如下所示:

我尝试使用wait使我的异步函数像同步任务一样工作,它适用于常规函数。但这对我的匿名函数不起作用

所以我在mongoose模式中有一个函数:

userSchema.methods.comparePassword=函数comparePassword(candidatePassword,cb){
bcrypt.compare(candidatePassword,this.password,(err,isMatch)=>{
cb(err,isMatch);
});

};尝试将其分配给承诺,如下所示:

userSchema.methods.comparePassword=async(candidatePassword,cb)=>{
等待新的承诺((决定,拒绝)=>{
bcrypt.compare(candidatePassword,this.password,(err,isMatch)=>{
解决(cb(err,isMatch));
});
})
};

您已经为compare函数提供了回调。说

接受回调的异步方法在回调时返回承诺 如果承诺支持可用,则未指定。“

Promise支持可能可用,因此请尝试不返回回调,它看起来应该可以工作。:-)

顺便说一句,如果您遇到不支持承诺的后续API,您可能需要查看节点的功能。它将它们转换为基于承诺的函数。从链接的文档中:

const util = require('util');
const fs = require('fs');
const stat = util.promisify(fs.stat);
const stats = await stat('.');

它被称为
回调风格
函数,它不是
承诺
,因此您不能在这里使用
等待
。如果要使用
async/await
,则需要将
回调样式
函数转换为
承诺
。这是否回答了您的问题?您可以使用预览添加图像,而不是作为link@srknzlstackoverflow不允许我,因为我是新用户签出