如何从调用函数返回异步结果



我对异步技术还很陌生,而且我对这一点很执着。

我试图通过mongoose获得mongo查询的结果,将其与另一个值进行比较,并从run((函数返回比较结果。

async run() {
const thisHash = await this.getHashOfElement(url, '.edit-text');
var latestHash;
await Invitation.findOne().sort('-updated').exec(async (e, record) => { 
if(record != undefined) {
const latestInvitation = record;
latestHash = latestInvitation.hash;
console.log("latestHash inside");
console.log(latestHash);
} else{
throw e;
}
});
console.log('latestHash outside:');
console.log(latestHash);
return latestHash === thisHash;
}

run((函数总是返回false,因为它认为在进行比较时latestHash是未定义的。

我以为它会等到findOne((完成,因为我把wait放在它前面,然后执行比较。但是外部控制台日志显示在内部之前,并且它是未定义的。

我需要做什么?

谢谢!

如果您考虑过这样尝试,在使用await.exec()时需要返回一个值

文件:https://mongoosejs.com/docs/promises.html

async function run() {
try {
const thisHash = await this.getHashOfElement(url, '.edit-text');
const record = await Invitation.findOne().sort('-updated').exec();
if (!record || !thisHash)
throw new Error('no record');
return Boolean(thisHash === record.hash);
} catch (error) {
throw new Error('error: ', error);
}
}

我个人很少使用回调,因为我不希望代码看起来嵌套得太多。在您的方法中,您需要将比较移动到回调中,以便代码能够正确执行。并且还需要return await Invitation...

最新更新