小编Dmi*_*try的帖子

迅速。结合。有没有办法在重试时多次调用发布者块?

当使用 Swift/Combine 中的 retry() 发生某些错误时,我想多次发出网络请求。发布者内部的块只被调用一次,这意味着当发生错误时,对真正的应用程序只有一个请求。我的代码是:

import UIKit
import Combine
import PlaygroundSupport

enum TestFailureCondition: Error {
    case invalidServerResponse
}

var backgroundQueue: DispatchQueue = DispatchQueue(label: "backgroundQueue")

var failPublisher: AnyPublisher<(Data, URLResponse), Error> {
    Future<(Data, URLResponse), Error> { promise in
        print("Attempt to call")
        backgroundQueue.asyncAfter(deadline: .now() + Double.random(in: 1..<3)) {
            promise(.failure(TestFailureCondition.invalidServerResponse))
        }
    }
    .eraseToAnyPublisher()
}

let cancellable = failPublisher
.print("(1)>")
.retry(3)
.print("(2)>")
.sink(receiveCompletion: { fini in
    print(" ** .sink() received the completion:", String(describing: fini))


    PlaygroundPage.current.finishExecution()
}, receiveValue: { stringValue in
    print(" ** .sink() received \(stringValue)") …
Run Code Online (Sandbox Code Playgroud)

swift combine

9
推荐指数
2
解决办法
2889
查看次数

快速组合。从超时处理程序块返回的正确方法是什么?

我需要在组合中实现超时函数的处理程序。让我们考虑以下代码结构:

SomeKindOfPublisher<Bool, Never>()
   .timeout(timeoutInterval, scheduler: backgroundQueue,
      customError: { [weak self] () -> Never in
         ...
         while true {} // This block should not return because of Never
      }
Run Code Online (Sandbox Code Playgroud)

我的问题是如何避免出现奇怪的线条while true {}?我不想将 Never 更改为 Error 类型。

swift combine

0
推荐指数
1
解决办法
3931
查看次数

标签 统计

combine ×2

swift ×2