使用URLSession和Combine处理HTTP状态代码

物质目标

我正在尝试处理通过DataTaskPublisher读取其响应状态代码到达的响应。

当状态码大于299时,我想返回一个ServiceError类型为Failure。在每一个例子,我已经看到我已经使用.mapError.catch......在这种特殊情况下,从.flatMap,我真的不知道如何处理发布响应返回错误,而不是TResponse...

    return URLSession.DataTaskPublisher(request: urlRequest, session: .shared)
        .mapError{error in return ServiceError.request}
        .flatMap{ data, response -> AnyPublisher<TResponse, ServiceError> in

            if let httpResponse = response as? HTTPURLResponse,
                (200...299).contains(httpResponse.statusCode){

                return Just(data)
                    .decode(type: TResponse.self, decoder: JSONDecoder())
                    .mapError{error in return ServiceError.decode}
                    .eraseToAnyPublisher()
            }else{
                //???? HOW TO HANDLE THE ERROR?
            }
        }
        .receive(on: RunLoop.main)
        .eraseToAnyPublisher()
他的脾气

如果我正确理解了您的目标,那么您需要

}else{
    return Fail(error: ServiceError.badServiceReply)
              .eraseToAnyPublisher()
}

简单的例子:

URLSession.shared
    .dataTaskPublisher(for: URL(string: "https://www.google.com")!)
    .receive(on: DispatchQueue.main)
    .flatMap { _ in
        Fail(error: URLError(URLError.unsupportedURL)).eraseToAnyPublisher()
    } //for the sake of the demo
    .replaceError(with: "An error occurred") //this sets Failure to Never
    .assign(to: \.stringValue, on: self)
    .store(in: &cancellableBag)

由于重新映射到发布者,将始终分配字符串“发生错误”Fail

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用RxSwift和URLSession处理401状态

来自分类Dev

无法在Siddhi中使用'regex'http状态代码处理响应

来自分类Dev

使用ReadAsStringAsync()时如何处理Http状态代码

来自分类Dev

如何使用 HttpWebResponse 处理自定义 HTTP 状态代码

来自分类Dev

Alamofire + Combine:获取HTTP响应状态代码

来自分类Dev

仅使用curl和php获得http状态代码

来自分类Dev

GraphQL API中的HTTP状态代码处理

来自分类Dev

处理HTTP重定向状态代码

来自分类Dev

HTTP状态代码,无法处理请求

来自分类Dev

IIS覆盖MVC中404和500 http状态代码的处理

来自分类Dev

Spring Cloud Contracts可以使用不同的返回http状态代码处理重复的请求吗?

来自分类Dev

REST API和HTTP状态代码

来自分类Dev

HttpClient GetStreamAsync和HTTP状态代码?

来自分类Dev

在HTTP处理程序中使用会话状态

来自分类Dev

在HTTP处理程序中使用会话状态

来自分类Dev

表示错误处理程序不适用于给定的http状态代码和自定义消息

来自分类Dev

MVC错误处理涵盖哪些HTTP状态代码

来自分类Dev

处理Netty中临时移动的Http状态代码302

来自分类Dev

Mongodb错误代码和相应的http状态代码

来自分类Dev

使用OkHttp获取Http状态代码

来自分类Dev

使用Rest API返回http状态代码

来自分类Dev

使用Http状态代码验证正确的URL

来自分类Dev

正确使用412 http状态代码?(休息)

来自分类Dev

是否使用HTTP状态代码描述?

来自分类Dev

不推荐使用的URL的HTTP状态代码

来自分类Dev

如何在Linux中使用curl分别获取http状态代码和内容

来自分类Dev

如何在golang中使用“ 422无法处理的实体(WebDAV)”或任何其他自定义http状态代码

来自分类Dev

如何使用OutboundDeliveryV2ServiceBatch访问批处理请求中包含的单个更新请求的HTTP状态代码?

来自分类Dev

Kotlin Multiplatform-使用Ktor处理响应http代码和异常

Related 相关文章

  1. 1

    使用RxSwift和URLSession处理401状态

  2. 2

    无法在Siddhi中使用'regex'http状态代码处理响应

  3. 3

    使用ReadAsStringAsync()时如何处理Http状态代码

  4. 4

    如何使用 HttpWebResponse 处理自定义 HTTP 状态代码

  5. 5

    Alamofire + Combine:获取HTTP响应状态代码

  6. 6

    仅使用curl和php获得http状态代码

  7. 7

    GraphQL API中的HTTP状态代码处理

  8. 8

    处理HTTP重定向状态代码

  9. 9

    HTTP状态代码,无法处理请求

  10. 10

    IIS覆盖MVC中404和500 http状态代码的处理

  11. 11

    Spring Cloud Contracts可以使用不同的返回http状态代码处理重复的请求吗?

  12. 12

    REST API和HTTP状态代码

  13. 13

    HttpClient GetStreamAsync和HTTP状态代码?

  14. 14

    在HTTP处理程序中使用会话状态

  15. 15

    在HTTP处理程序中使用会话状态

  16. 16

    表示错误处理程序不适用于给定的http状态代码和自定义消息

  17. 17

    MVC错误处理涵盖哪些HTTP状态代码

  18. 18

    处理Netty中临时移动的Http状态代码302

  19. 19

    Mongodb错误代码和相应的http状态代码

  20. 20

    使用OkHttp获取Http状态代码

  21. 21

    使用Rest API返回http状态代码

  22. 22

    使用Http状态代码验证正确的URL

  23. 23

    正确使用412 http状态代码?(休息)

  24. 24

    是否使用HTTP状态代码描述?

  25. 25

    不推荐使用的URL的HTTP状态代码

  26. 26

    如何在Linux中使用curl分别获取http状态代码和内容

  27. 27

    如何在golang中使用“ 422无法处理的实体(WebDAV)”或任何其他自定义http状态代码

  28. 28

    如何使用OutboundDeliveryV2ServiceBatch访问批处理请求中包含的单个更新请求的HTTP状态代码?

  29. 29

    Kotlin Multiplatform-使用Ktor处理响应http代码和异常

热门标签

归档