Firebase 函数 - 抛出错误会导致冷启动吗?

Firebase Functions - Does throwing errors produce cold starts?

我读到 here 未处理的错误可能会导致冷启动。我正在实现一个触发函数,如下:

exports.detectPostLanguage = functions
  .region("us-central1")
  .runWith({ memory: "2GB", timeoutSeconds: "540" })
  .firestore.document("posts/{userId}/userPosts/{postId}")
  .onCreate(async (snap, context) => {
     // ...

     const language = await google.detectLanguage(post.text);

     // ... more stuff if no error with the async operation

  });

我是否需要捕获 google.detectLanguage() 方法错误以避免冷启动?

如果是,我应该怎么做(A 或 B)?

甲:

const language = await google.detectLanguage(post.text)
   .catch(err => {
       functions.logger.error(err);
       throw err; // <---- Will still cause the cold start?
   });

乙:

try {
   var language = await google.detectLanguage(post.text)
} catch(err) {
   functions.logger.error(err);
   return null; // <----
}

更新

基于 Frank 的解决方案:

exports.detectPostLanguage = functions
  .region("us-central1")
  .runWith({ memory: "2GB", timeoutSeconds: "540" })
  .firestore.document("posts/{userId}/userPosts/{postId}")
  .onCreate(async (snap, context) => {
     try {
        // ...

        const language = await google.detectLanguage(post.text);

        // ... more stuff if no error with the async operation
     } catch(err) {
        return Promise.reject(err);
     }
     
     return null; // or return Promise.resolve();
  });

如果任何异常从 Cloud Function 主体中逃逸,运行时会假定容器处于不稳定状态并且不会再安排它处理事件。

为防止这种情况发生,请确保您的代码中没有任何异常逃逸。您可以 return 没有值,也可以是指示代码中任何异步调用何时完成的承诺。