为什么除非我记录承诺,否则我的异步代码无法正常工作?

我有一些异步代码可以调用 mongo 数据库并插入/获取项目。当我在本地开发时,下面的代码工作正常。但是,当我让猫鼬实例连接到 MongoDb Atlas 时,就会出现问题。特别是,除非我 console.log 承诺,否则我的代码似乎无法正常工作,这对我来说毫无意义。例如,使用 console.log 语句,我的所有测试都按预期通过。没有它,35 次测试将失败......这是因为我期望的承诺返回 null,当它应该从数据库返回一些 JSON 对象时。我的代码没有正确阻塞吗?

感觉就像我在处理薛定谔的猫...任何帮助将不胜感激。提前致谢。

下面是一个promise/函数调用示例。然后我将它传递给 _executeQuery。我在相关函数上有等待,所以我不认为这是因为我在某处遗漏了等待这个词。

async _inSomeAsyncFunction = () => {
      const dbQueryPromise = this._dbModel.findById(_id,modelView).lean();
      await this._executeQuery({ dbQueryPromise,isaccesspermitted: true })
}

_executeQuery 基本上是在用户有权访问的情况下获取承诺的结果。

private _executeQuery = async (props: {
    isaccesspermitted: boolean;
    dbQueryPromise: Promise<any>;
  }): Promise<any> => {
    const { isaccesspermitted,dbQueryPromise } = props;

    if (!isaccesspermitted) {
      throw new Error('access denied.');
    }
    console.log(dbQueryPromise,'promise'); // without this line,dbQueryResult would be null...
    const dbQueryResult = await dbQueryPromise;
    return dbQueryResult;
  };

经过更多测试,我发现第一个 API 调用有效,但之后的任何调用都返回 null...

编辑:

this._dbModel 是一些猫鼬模式。例如,

 const dbSchema= new Schema({
    name:  String,});

 const dbModel = mongoose.model('DbSchema',dbSchema);
liping0207 回答:为什么除非我记录承诺,否则我的异步代码无法正常工作?

尝试按如下方式替换您的 dbQueryPromise:

 const dbQueryPromise = this._dbModel.findById(_id,modelView).lean().exec();

Mongoose 查询不会被执行,除非您传递 callBack function 或使用 exec()

,

对于遇到类似问题的其他人,我是这样解决的:

我变了

const dbQueryResult = await dbQueryPromise;

const dbQueryResult = await dbQueryPromise.then((doc) => {
      return doc;
    });
本文链接:https://www.f2er.com/15890.html

大家都在问