- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
之前
URLSession.shared.dataTask(for request: URLRequest) { data, error, response in ... }
data
字段以及其他字段可能为零。现在有了合并的
URLSession.shared.dataTaskPublisher(for: urlRequest)
(数据,响应)元组不再是可选类型。我意识到这意味着我们必须将其作为 URLError 来捕获,我们可以在 sink(receiveCompletion: { ... }
) 中捕获它,但是如何区分没有数据和任何其他错误? p>
最佳答案
服务器提供的任何数据都将变成来自 dataTaskPublisher 的“响应”对象。在将该数据放入 .assign()
或 .sink()
订阅者之前通常使用的模式主要取决于您的代码。
我更喜欢在这里使用 tryMap()
运算符,它可以让您检查响应对象,并可能转换 404 响应之类的东西(这不是 Combine 管道中的失败状态)陷入失败。之后,一种常见的模式是获取数据并将其运行到 .decode()
运算符中以获取结构化对象。
然后您可以选择如何处理失败 - 最常见的解决方案是使用 .catch()
将发布者的值替换为您想要显示的任何默认值。
使用它的核心细节可能是这样的:
let remoteDataPublisher = URLSession.shared.dataTaskPublisher(for: myURL!)
.tryMap { data, response -> Data in
guard let httpResponse = response as? HTTPURLResponse,
httpResponse.statusCode == 200 else {
throw TestFailureCondition.invalidServerResponse
}
return data
}
.decode(type: PostmanEchoTimeStampCheckResponse.self, decoder: JSONDecoder())
这是来自 https://heckj.github.io/swiftui-notes/#patterns-datataskpublisher-trymap 的示例, 部分免费在线引用 Using Combine .
(那里还有更多关于使用 catch() 处理来自 https://heckj.github.io/swiftui-notes/#patterns-oneshot-error-handling 的 dataTaskPublisher 的错误的详细信息)
关于ios - 如果 dataTaskPublisher 有非零数据,那么错误类型是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58810262/
如何模拟 URLSession.DataTaskPublisher?我有一个类 Proxy 需要注入(inject)一个 URLSessionProtocol protocol URLSessionP
在下面的代码中,应用程序对象数组用于创建发布者数组,这些发布者数组被合并到发布对象数组中。 apps.map { latestRelease(app: $0) }.merge() 这是最新版本的完成方
在 Xcode 11 beta 5 或 6 中,我现有的代码依赖于 URLSession.DataTaskPublisher停止工作。好像DataTaskPublisher从不发布任何值,但我不知道为
之前 URLSession.shared.dataTask(for request: URLRequest) { data, error, response in ... } data 字段以及其他字
我想从 REST API 获取数据,为此,我需要先获取 ID 数组 - 第一次调用。之后,我需要使用每个 ID 进行 API 调用。我不想使用 completionHandlers,而是使用 Comb
我最近遇到了两个数据获取(下载)API,它们对我来说似乎是一样的。我不知道什么时候应该使用一个而不是另一个。 我可以用 URLSession.shared.dataTask var tasks
如何转换 URLSession.DataTaskPublisher至 Future在组合框架中。 在我看来, Future 发布者在这里更合适,因为调用只能发出一个响应并最终失败。 在 RxSwift
我有一个简单的问题,我只能在documentation中看到dataTaskPublisher我可以通过它调用 get web 服务,但是如何调用可以返回发布者的 post web 服务呢? 最佳答案
我正在努力从 URLSession 的 ApiErrorResponse 形成一个强类型错误对象(我下面示例中的 .dataTaskPublisher(for:) 对象)出版商,但找不到线索。在这里,
尝试发出网络请求时,出现错误 finished with error [-999] Error Domain=NSURLErrorDomain Code=-999 "cancelled" 如果我使用
尝试发出网络请求时,出现错误 finished with error [-999] Error Domain=NSURLErrorDomain Code=-999 "cancelled" 如果我使用
将我们的 API 客户端切换到组合后,我们开始收到用户关于错误“操作无法完成 (NSURLErrorDomain -1.)”的报告,即 error.localizedDescription从我们的 A
我是一名优秀的程序员,十分优秀!