我们应该在什么时候使用RxJS抽头运算符



我从文档中不明白。有人能给我解释一下吗?

大多数操作符都是按流式顺序工作的,例如:

source$.pipe(
map((a: string) => changeAndReturnArray(a)),
filter((b: string[]) => giveMeOnlySymbolsThatAreAfterNInAlphabet(b)),
switchMap((c: string[]) => putToSomeObservable(c))
....
);

在这个例子中,你并没有"打断"流,也没有跳出流去做一些外部动作。使用"点击"操作符可以跳出流,您可以:

  • 调用会导致一些副作用的函数,这些副作用可能对最终用户可见(例如,显示对话框、显示小吃条、重定向到不同的路由(但在我看来,不建议以这种方式使用tap))
  • 商店的调度操作(如果您使用任何操作,例如ngrx商店)
  • 调试您的代码->console.log()
  • 任何可以被视为流的"副作用"的东西

我的个人意见-只有在找不到更好的解决方案时才使用"tap"。跳出流并调用一些副作用可能是一把双刃剑,尤其是当你处理一些更大的应用程序时。副作用总是很难维护,而且您可以毫无理由地使用正在做神奇事情的应用程序。

例如,您可以使用它来执行副作用。或者,您可以使用它来查看在不影响/修改Observable的情况下传递的当前值。所以有点像console.log(),但在流中。

贴花

public tap(nextOrObserver: Observer | function, error: function, complete: function): Observable 

tapdo运算符的替换,该运算符返回的observable与您的源observable相同。对于每个发出的值,执行副作用。它有3个可选参数。

  • nextOrObserver:一个正常的可观察对象,用于执行副作用
  • error:回调源Observable中的错误
  • complete:完成源代码的回调

建议用于调试。

最新更新