【问题标题】:How to handle error in swift when server is not available?服务器不可用时如何快速处理错误?
【发布时间】:2019-05-08 14:24:32
【问题描述】:

当服务器不可用或宕机时如何处理此服务器调用的错误?

func createData(request:Crudpb_CreateRequest, with completion: @escaping (String) -> Void) throws {
    DispatchQueue.main.async {
        self.response = try! self.client.create(request) // <---- How to handle error for this server call when the server is not available or is down?
        completion(self.response.result)
    }
}

它返回一个对象,所以当我将结果存储在响应变量中然后说 print(response.result) 它会打印响应字符串

请帮忙。

【问题讨论】:

  • 什么错误?没有人知道create(request 会抛出哪种错误。至少添加一个do - catch 块以获得错误而不是崩溃
  • @vadian 我已经提到“当服务器不可用或关闭时”
  • 首先在do/catch 中将try! 替换为try

标签: swift protocol-buffers grpc


【解决方案1】:

我不明白你到底想做什么,不知道你的整个代码。

self.client是什么Class的对象? self.client.create 方法返回什么?网址响应?

不管怎样,你可以试试:

if let response = self.response as? HTTPURLResponse{
    if response.statusCode == 503{
        //server not available
    }
}

在您的self.client.create 方法之后。

【讨论】:

  • 它返回一个对象,所以当我将结果存储在响应变量中然后说 print(response.result) 它打印响应字符串。
  • 项目使用HTTP/2连接服务器。我正在使用 gRPC protobuf
【解决方案2】:

您可以通过获取http状态码503来处理它。这意味着服务器不可用。

【讨论】:

  • 顺便说一句,连接是 HTTP/2 类型。
【解决方案3】:

尝试切换response.response?.statusCode。如果代码为 503,则服务器不可用。请注意,如果有任何错误,statusCode 可能不可用,因此请适当处理任何nils。

【讨论】:

    猜你喜欢
    • 2021-03-12
    • 2015-06-05
    • 1970-01-01
    • 1970-01-01
    • 2013-11-24
    • 1970-01-01
    • 1970-01-01
    • 2018-01-07
    • 1970-01-01
    相关资源
    最近更新 更多