How to reset the Observable interval operator in RXSwift?
我是RXSwift的新手,我定义了一个Observable interval定时器序列,该序列每秒调用一次Webservice方法。
在该Web服务响应中,我收到新的重试时间值,该值必须替换为当前时间。
如何用新的时间值重置此序列?
这是我的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | func mySequence() { /////////////////////////////////////// subscribe to Timer (time change) var time = try! self.timer.value() self.disposeTimer = timer.subscribe({ value in time = value.element! print("=============================\\(String(describing: time))=======================================") }) /////////////////////////////////////// subscribe to Timer (time change) let observable = Observable<Int>.interval(TIME I NEED TO CHANGE After response , scheduler: MainScheduler.instance).map { _ in () self.myWebserviceMethod() } disposable = observable.subscribe(onNext: {num in }, onError: { err in }, onCompleted: { }, onDisposed: { }) } |
所有事情都会发生,但是间隔计时器时间仍然是旧值:(
只需删除(处置)旧订阅并以新间隔创建新订阅
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | var timerDisposable:Disposable? var retryTime:RxTimeInterval = 1 func stratRefresh() { timerDisposable?.dispose() timerDisposable = Observable<Int> .timer(0, period: retryTime, scheduler: MainScheduler.instance) .subscribe(onNext: { value in myWebserviceMethod() }) } func myWebserviceMethod() { // In service response update your retryTime // Ex. APIClient.getRetryTime() { newTime in if retryTime != newTime { retryTime = newTime stratRefresh() } } } |