在我当前的项目中,我有一个可观察到的返回值,并且我必须根据该可观察到的返回值更新本地变量。
我看到了两种方法,要么直接订阅我的可观察对象,要么使用pipable运算符。
根据您的经验/知识,最佳实践是什么?
第一种方法(直接订阅):
this.myObservable$.subscribe(value=> {
this.myValue = value;
});
第二种方法(使用可点运算符):
this.myObservable$.pipe(
tap(value=> this.myValue = value)
).subscribe();
答案 0 :(得分:2)
我认为两者都是有效的,但是在这种特殊情况下,我将使用第一种方法,并在subscribe块中进行工作。原因是意图更清晰。
“敲击”用于产生副作用,但是您在这里没有产生副作用,因为在敲击之后不再进行任何逻辑操作。您正在做的是使用未包装的最终值做某事,这就是订阅块的作用。
答案 1 :(得分:0)
如果必须强制更新局部变量,我考虑在pipe
内执行此操作。我可能对同一可观察对象有多个订阅,但我可能忘记了更新其中任何一个的局部变量。在Observable中照顾好这一点是很好的。
myOb$ = this.myObservable$.pipe(
tap(value=> this.myValue = value)
)
就您而言,如果您未对Observable进行任何更改,则可以使用tap()
代替map()
考虑您要更新某个Observable所在类的变量,而不是该变量的预订位置,那么这就是您的做法。假设服务中存在一个Observable,并且正在订阅多个组件,每次发射后,该服务的变量都必须更新。
如果局部变量属于预订Observable的类,那么在管道中当然没有必要这样做。