簡體   English   中英

使用takeUntil()關閉條件的訂閱

[英]Close subscription on condition with takeUntil()

我已訂閱,可以從NgRx減速器獲取提供程序。 我想使用takeUntil()在最終返回具有內容的數組時自動關閉訂閱:

// Fetch providers
this.store.pipe(select(reducer.getProviders))
//  .takeUntil(reducer.getProviders.length > 0)
    .subscribe(providers => {
        if (providers) {
            this.providers = providers;
//          takeUntil(/** something **/);
        }
    });

有人可以幫我弄這個嗎?

我不知道如何利用takeUntil()

您正在尋找takeWhile()

takeUntil()的參數是一個可觀察值,一旦該可觀察值發出,它將停止獲取值。

takeWhile()的參數是確定是否采用值的謂詞。

請參閱有關學習-rxjs上的takeWh的文檔: https ://www.learnrxjs.io/operators/filtering/takewhile.html

takeWhile(predicate:function(value,index):boolean,inclusive ?: boolean):可觀察

發射值,直到提供的表達式為假。

takeUntil接受一個Observable。 (來源: docs )。 對於您的情況,使用takeWhile會更有意義,只要滿足特定條件,它就會發出值(來源: docs )。 將可選的inclusive屬性設置為true,以便它還會發出未通過謂詞的第一項。

this.store.pipe(select(reducer.getProviders))
    .takeWhile(reducer => reducer.getProviders.length == 0, true)
    .subscribe(providers => {
        if (providers) {
            this.providers = providers;
        }
    });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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