ReactiveSwift:最多重试n次,然后执行一些代码

时间:2017-04-25 22:27:47

标签: swift reactive-programming reactive-swift

考虑以下代码

func test() -> SignalProducer<String, Error> {
    return SignalProducer<String, Error> { observer, _ in
        ...
    }
}

test()
    .on(value: { s in
        print(s)
    })
    .retry(upTo: 2)
    .start()
}

是否有内置方式重试n次,然后(如果所有尝试都失败)执行一些回调?

当然可以引入一个本地计数器并计算.on(failed: _)中的失败,然后在计数器等于n + 1时执行某些操作,但还有其他方法吗?

1 个答案:

答案 0 :(得分:2)

retry(upTo:)一旦达到其重试限制就会传递错误,因此您可以使用允许处理值和错误的start方法之一。例如,使用startWithResult你可以这样做(注意我没有测试过这段代码,但它应该给你这个想法):

test()
    .retry(upTo: 2)
    .startWithResult { result in
        switch result {
        case let .success(value):
            print(value)
        case let .failed(error):
            // handle error here
        }
    }