Cloud Functions: Mongoose aggregate search causing Error: Collection method aggregate is synchronous error

Cloud Functions: Mongoose aggregate search causing Error: Collection method aggregate is synchronous error

当我的 Flutter 应用启动时,我正在调用 Cloud Function。当我从 'flutter run' 开始时,我的函数调用 returns Error: Collection method aggregate is synchronous.

但是,当我使用 command + r 刷新应用程序时,它 returns 是正确的值。

app.dart

  var gameFunction = await functions.httpsCallable('gameS').call({
     'gamingId': 'afijeoaijosf'
  });

f函数索引

export const gameS = functions.https.onCall(async (data, context) => {
    try {
      return await gameFunctionF(data, context);
    } catch (err) {
      const aa = err as functions.https.HttpsError;
      throw new functions.https.HttpsError(aa.code, aa.message, aa.details);
    }
  });

f 函数 gameFunctionF

export async function gameFunctionF(data: any, context: CallableContext) {
  console.log(data);
  try {
    return await db
    .aggregate([
      { $project: { game_profile: 1} },
    ])
    .toArray();
  } catch (err) {
    console.log(`aaaa - err - ${err}`);
    throw 'nooooo';
  }
}

当我启动应用程序时,出现 Collection method aggregate is synchronous 错误。但是当我使用 command + r 刷新应用程序时,它会 returns 我想要的数据。没有变量被改变没有什么。 var gameFunction 在调用 app.dart 时运行。

我真的不明白为什么会这样,因为它只会在我从 flutter run 开始时导致此错误,但当我刷新应用程序时它工作正常。

我试过 android phone,当我终止应用程序后打开应用程序时也会导致错误。

正如 Mousu​​mi 建议查看的那样,link 解决了我的问题。

const mongoConn = createConnection();
export const mongooooooo = mongoConn.openUri(
  `uri`,
  {
    connectTimeoutMS: 30000,
  }
);

这就是我从 createConnection(uri) 改变过来的方式。然后,您必须将 db 函数调整为

(await db)
    .aggregate([
      { $project: { game_profile: 1} },
    ])

错误已解决!谢谢木炭!

更新--------

我不得不在 (await db) 前面添加 await 以获得承诺结果。

await (await db)
    .aggregate([
      { $project: { game_profile: 1} },
    ])