可观察的最佳实践

Observable best practice

在我当前的项目中,我有一个可观察的返回值,我必须根据可观察的返回值更新我的局部变量。

我看到了两种方法,一种是直接订阅我的 observable,另一种是使用 pipable 运算符。

根据您的 experience/knowledge,最佳做法是什么?

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

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

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

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

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

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

就你的情况而言,如果你没有对 Observable 进行任何更改,你可以使用 tap() 而不是 map()

假设您想更新一个 class 的变量,其中 Observable 存在于它被订阅的地方,那么这就是您要采用的方式。比如说,一个 Observable 存在于一个 Service 中,并且有多个组件订阅它,在每次发射之后,服务的一个变量必须被更新。

如果局部变量属于订阅 Observable 的 class,那么当然在管道内做它是没有意义的。

我认为两者都有效,但在这个特定实例中,我会使用第一种方法并在订阅块中完成工作。原因是意图更明确。

"tap" 是为了产生副作用,但你在这里没有产生副作用,因为点击后没有更多的逻辑在进行。您正在做的是使用未包装的最终值来做某事,这就是订阅块的用途。