0

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

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

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

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

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

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

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

2 回答 2

2

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

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

于 2019-04-24T08:10:41.057 回答
0

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

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

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

考虑到您想要更新 Observable 存在的类的变量,而不是它被订阅的地方,那么这就是您要走的路。比如说,一个 Observable 存在于一个服务中,并且多个组件正在订阅它,在每次发射之后,必须更新服务的一个变量。

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

于 2019-04-24T07:35:33.667 回答