可观察的最佳实践

时间:2019-04-24 07:32:33

标签: angular rxjs rxjs-pipeable-operators

在我当前的项目中,我有一个可观察到的返回值,并且我必须根据该可观察到的返回值更新本地变量。

我看到了两种方法,要么直接订阅我的可观察对象,要么使用pipable运算符。

根据您的经验/知识,最佳实践是什么?

第一种方法(直接订阅):

this.myObservable$.subscribe(value=> {
  this.myValue = value;
});

第二种方法(使用可点运算符):

this.myObservable$.pipe(
    tap(value=> this.myValue = value)
  ).subscribe();

2 个答案:

答案 0 :(得分:2)

我认为两者都是有效的,但是在这种特殊情况下,我将使用第一种方法,并在subscribe块中进行工作。原因是意图更清晰。

“敲击”用于产生副作用,但是您在这里没有产生副作用,因为在敲击之后不再进行任何逻辑操作。您正在做的是使用未包装的最终值做某事,这就是订阅块的作用。

答案 1 :(得分:0)

如果必须强制更新局部变量,我考虑在pipe内执行此操作。我可能对同一可观察对象有多个订阅,但我可能忘记了更新其中任何一个的局部变量。在Observable中照顾好这一点是很好的。

myOb$ = this.myObservable$.pipe(
    tap(value=> this.myValue = value)
)

就您而言,如果您未对Observable进行任何更改,则可以使用tap()代替map()

考虑您要更新某个Observable所在类的变量,而不是该变量的预订位置,那么这就是您的做法。假设服务中存在一个Observable,并且正在订阅多个组件,每次发射后,该服务的变量都必须更新。

如果局部变量属于预订Observable的类,那么在管道中当然没有必要这样做。