Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 如何在对服务/存储的响应具有特定参数/值后停止订阅_Angular_Typescript_Observable_Ngrx - Fatal编程技术网

Angular 如何在对服务/存储的响应具有特定参数/值后停止订阅

Angular 如何在对服务/存储的响应具有特定参数/值后停止订阅,angular,typescript,observable,ngrx,Angular,Typescript,Observable,Ngrx,更准确地说,我有一个服务或存储选择器,它返回一个对象,该对象在一段时间后会发生变化,返回一个不同的对象 但问题是,我想在这个对象中有某个属性后,或者如果某个属性对它有某个值,我想取消订阅这个服务 我知道我通常使用“rxjs”中的takeUntil函数,我以前在需要从服务获取第一个响应时使用过pipefirst,或者.pipetakeuntildestory$当使用它的组件被销毁时,我操纵destroy$ 我想在收到某个服务/可观察服务的响应后停止订阅该服务/可观察服务,或者如果该服务/可观察服务

更准确地说,我有一个服务或存储选择器,它返回一个对象,该对象在一段时间后会发生变化,返回一个不同的对象

但问题是,我想在这个对象中有某个属性后,或者如果某个属性对它有某个值,我想取消订阅这个服务

我知道我通常使用“rxjs”中的takeUntil函数,我以前在需要从服务获取第一个响应时使用过pipefirst,或者.pipetakeuntildestory$当使用它的组件被销毁时,我操纵destroy$

我想在收到某个服务/可观察服务的响应后停止订阅该服务/可观察服务,或者如果该服务/可观察服务的属性具有我认为最终的值。

只需取消订阅即可

subscription // as field eg


subscription=yourObservable.subscribe(()=> if whaever subscription.cancel()); //or .unsubscribe() cant remember now
或者使用takeUntil操作符

这是一个很好的选择。例如:

observable$.pipe(
    takeWhile(x => x.someProperty !== someValue))
正如我在上面所做的那样,请确保对条件求反,以便在属性没有您想要的值时获取值。这意味着一旦值匹配,它将停止并取消订阅

要获取导致takeWhile结束订阅的实际值,请将true作为第二个参数传递给takeWhile inclusive:

当可选的inclusive参数设置为true时,它还将发出第一个未传递谓词的项


我也尝试过这个,我得到一个错误,说我不能在初始化之前访问变量或者类似的东西,这就是为什么要将它设为一个字段或takeUntil
observable$.pipe(
    takeWhile(x => x.someProperty !== someValue))
observable$.pipe(
    takeWhile(x => x.someProperty !== someValue, true))