0

考虑下面的代码

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 则执行某些操作,但是还有其他方法吗?

4

1 回答 1

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
        }
    }
于 2017-04-27T17:03:37.557 回答