使用 takeUntil() 关闭订阅

Cly*_*rog 2 ngrx angular ngrx-store rxjs6

我订阅了从 NgRx 减速器获取提供程序的订阅。takeUntil()当最终返回一个包含内容的数组时,我想使用它来自动关闭订阅:

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

有人可以帮我弄这个吗?

我不知道如何利用 takeUntil()

nas*_*h11 11

takeUntil接受一个 Observable。(来源:文档)。对于您的情况,使用 会更有意义takeWhile,只要满足特定条件,这就会发出值(来源:docs)。将可选inclusive属性设置为 true,以便它也会发出第一个未通过谓词的项目。

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


sko*_*dev 5

您正在寻找takeWhile().

takeUntil()的参数是一个 observable,一旦该 observable 发出它就会停止取值。

takeWhile()的参数是决定是否取值的谓词。

请参阅 learn-rxjs 上的 takeWhile 文档:https ://www.learnrxjs.io/operators/filtering/takewhile.html

takeWhile(predicate: function(value, index): boolean, inclusive?: boolean): Observable

发出值直到提供的表达式为假。