使用 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;
}
});
我订阅了从 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;
}
});