我对异步技术还很陌生,而我对这个问题一无所知。
我正在尝试通过猫鼬获取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,然后执行比较。但是外部控制台日志出现在内部控制台之前,并且未定义。
我需要做什么?
谢谢!
答案 0 :(得分:0)
您考虑过尝试这种方法,需要在将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...