使用 takeUntil() 在条件下关闭订阅

Close subscription on condition with takeUntil()

我订阅了从 NgRx reducer 获取提供程序的服务。我想使用 takeUntil() 在最后 returns 一个包含内容的数组时自动关闭订阅:

// 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()的参数是判断是否取值的谓词

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

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

Emit values until provided expression is false.

takeUntil 接受一个 Observable。 (来源:docs). For your case, it would make more sense to use takeWhile, this will emit values as long as a particular condition is satisfied (Source: docs)。将可选的 inclusive 属性 设置为 true 以便它也将发出第一个未通过谓词的项目。

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