首页 > 解决方案 > Firebase Cloud Functions – JavaScript/Typescript Promise reject() 问题

问题描述

我正在使用 Cloud Functions 方法,例如:

export const someCallableCloudFunction = functions.https.onCall((data, context) => {
   […]
   return new Promise((resolve, reject) => {
      […]
      if (someStatement) {
         resolve("resolveDataString")
      } else {
         reject({ status: "error", code: "429", message: "someErrorMessage" })
      }
   })
})

并用以下方式调用它们:

firebase.functions().httpsCallable("someCallableCloudFunction")(/*some args*/)
   .then(data => { /* data = "resolveDataString" */ })
   .catch(error => { /* here's the problem */ })

问题:这是调用方法的客户端中的错误:[Error: INTERNAL]。这就是 Firebase Cloud Functions 控制台(模拟器!)中错误日志的样子:

{
  "status": "error",
  "code": "429",
  "message": "Unhandled error",
  "severity": "ERROR"
}

resolve()工作得很好,但是reject()1) 没有正确打印 Cloud Functions 方法中定义的错误对象,并且 2) 没有将错误对象提供给客户端。相反,客户收到[Error: INTERNAL].

我是否必须同时使用resolve()解决和拒绝以及定义可由客户处理的语句?

标签: javascripttypescriptfirebaseasynchronousgoogle-cloud-functions

解决方案


文档中所述:

为确保客户端获得有用的错误详细信息,请通过抛出(或返回被拒绝的 Promise)实例从可调用对象中返回错误functions.https.HttpsError

如果您的函数抛出 HttpsError 以外的错误,您的客户端将收到错误消息 INTERNAL和内部代码。


推荐阅读