簡體   English   中英

RxSwift 在 Zip 運算符中處理 observable

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM