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)
您正在寻找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
发出值直到提供的表达式为假。