有人能够用简单的语言解释我们用来观察输出的正常可观察运算符与do / tap似乎具有相同的功能之间的区别。我们为什么要使用do / tap?
答案 0 :(得分:4)
RxJS v6 +中的do/tap
运算符或tap
运算符与所有其他运算符的不同之处在于,它不会以任何方式修改通过它的项目。传递的函数的结果不作进一步处理(返回类型为void)。
这使执行具有“副作用”的代码(即修改可观察管道外部的状态的代码)更加安全。一个典型的示例是在console.log
函数中使用tap
,因为对该函数的调用运行的代码会更改浏览器的状态。
此外,如果您绝对需要在subscribe()
之前更改变量或属性,则还应该在tap
函数内执行此操作。否则,可能会破坏Observable管道的纯净度(纯净度意味着,对于相同的输入始终会获得相同的输出)。
在更改发给tap
运算符的项目时要小心,因为这将更改其他管道的行为并且会更改最终结果(因此再次破坏了纯净度。