【问题标题】:How to return an error from a HTTPS Cloud Function?如何从 HTTPS 云函数返回错误?
【发布时间】:2021-03-07 00:46:39
【问题描述】:

从 iOS 应用调用云函数如下所示:

var functions = Functions.functions()
functions.httpsCallable(name).call(data){ (result, error) in
    // Code here
}

如何从我的 Cloud Function 发送错误,以便在上面的代码中获取它?例如:

云功能:

exports.joinGame = functions.https.onCall((data, context) => {
     return Error("The game is full")
})

SwiftUI:

var functions = Functions.functions()
functions.httpsCallable("joinGame").call(data){ (result, error) in
    print(error) // "The game is full"
}

【问题讨论】:

  • 云函数只是返回一个 HTTP 响应。如果您在函数方面发现错误,则应返回适当的 HTTP 响应代码:tools.ietf.org/html/rfc7231#section-6。然后,您将本地代码中的 HTTP 响应代码作为来自 HTTP 请求的任何常规响应来处理。
  • 不清楚你想在 SwiftUI 中做什么。
  • 调用云函数将在 SwiftUI 中返回:(HTTPSCallableResult?, Error?) - 我想从我的云函数返回一条错误消息,该消息将出现在响应的第二个参数下(@ 987654327@)。 @Asperi
  • @Paulw11 这是有道理的。我会根据情况返回{ error: "error message" }{ success: "success message" }。谢谢。
  • 是的,我认为这是一种更好的方法。您也可以返回 { "success": true/false, "message":null/"Game full" } 或其他任何内容

标签: ios firebase swiftui google-cloud-functions


【解决方案1】:

我仍然不确定你想在哪里返回错误...但这里有一些可能的处理方式:

@State private var error: Error?

var body: some View {
   VStack {
     Text("Wait for Error")
       .onAppear {
         functions.httpsCallable("joinGame").call(data){ (result, error) in
            print(error) // "The game is full"
            DispatchQueue.main.async {
               self.error = error
            }
         }
     }
     if nil != error {
        Text("Got error!")   // << do anything with error here
     }
   }
   .onChange(of: error) { newError in
                            // << or here 
   }
}

【讨论】:

    猜你喜欢
    • 2019-08-21
    • 1970-01-01
    • 2021-10-12
    • 2021-04-26
    • 2019-09-03
    • 2020-02-04
    • 2021-05-30
    • 2023-04-09
    相关资源
    最近更新 更多