我有一些异步代码可以调用 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);