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

时间:2019-11-20 05:54:18

标签: javascript mongodb asynchronous mongoose async-await

我对异步技术还很陌生,而我对这个问题一无所知。

我正在尝试通过猫鼬获取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,然后执行比较。但是外部控制台日志出现在内部控制台之前,并且未定义。

我需要做什么?

谢谢!

1 个答案:

答案 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...