考虑下面的代码

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时执行一些操作,但是否有其他方法可以执行此操作?

最佳答案

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
        }
    }

10-08 05:54
查看更多