[英]RxSwift dispose observable in Zip operator
我遇到了 zip 運算符的問題。 我打算使用可觀察的計時器
var timer = Observable<Int>
.interval(0.1, scheduler: MainScheduler.instance)
.do(onNext:
{ num in
if(num == 20)
{
//Purpose of this timer is to show progress if second request takes too long
MessagesManager.show_progress()
}
})
let source = Observable .... //my observable of networking request
return Observable.zip(source, timer,
resultSelector: { value1, value2 in
// Here i want to cancel/dispose/stop timer observable
return value1
})
.do(onNext:
{ item in
MessagesManager.dismiss_progress()
}, onError:
{ error in
MessagesManager.dismiss_progress()
})
我希望 zip 運算符在第一次調用 onComplete 時關閉第二個 observable,但是在網絡請求完成后計時器繼續工作。 我該如何解決這個問題並在 zip 塊中/之后設置可觀察的計時器?
使用take(1)
來限制預期元素的數量:
return Observable.zip(source, timer,
resultSelector: { value1, value2 in
return value1
})
.take(1)
.do(onNext:
{ item in
MessagesManager.dismiss_progress()
}, onError:
{ error in
MessagesManager.dismiss_progress()
})
這樣,在源發出第一個元素后,zip 將創建第一對項目。 在您的resultSelector
中,您從該對中選擇第一個項目,然后take(1)
將確保立即完成(然后處置)observable。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.