我们什么时候应该使用 RxJS tap 运算符?

2024-03-24

我不明白从the docs https://rxjs-dev.firebaseapp.com/api/operators/tap。有人能给我解释一下吗?


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

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

在该示例中,您没有“破坏”流,也没有跳出流来执行某些外部操作。 使用“tap”运算符可以跳转到流之外,您可以:

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

我个人的意见 - 仅当您找不到更好的解决方案时才使用“tap”。跳到流之外并调用一些副作用可能是双刃剑,特别是当您处理一些更大的应用程序时。副作用总是更难维持,并且您可以毫无理由地使用正在做神奇事情的应用程序来完成。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我们什么时候应该使用 RxJS tap 运算符? 的相关文章

随机推荐

  • 如何在 Kotlin 中使用堆栈?

    如何在 Kotlin 中使用 Stack 来自 java 或者还有其他替代方案吗 我正在尝试将列表转换为堆栈 科特林 1 3 70介绍了kotlin collections ArrayDeque https kotlinlang org a
  • 来自 Node.js BigQuery 客户端库的更详细错误消息

    我用的是官方的与 BigQuery 的 Google Node 连接器 https github com googleapis nodejs bigquery 我有以下片段将记录流式传输到数据库中 module exports sendTo
  • 在 Angular JS 中解码 HTML 实体

    如何使用 Angular JS 解码文本中的 HTML 实体 我有字符串 quot 12 10 On Going Submission of quot quot Made Up quot quot Samples quot 我需要一种使用
  • Android Jack 编译器未从 proguard 规则中删除日志

    我尝试过使用 assumenosideeffects class android util Log public static boolean isLoggable java lang String int public static in
  • canvas ImageData 删除白色像素

    我有一些 html 图像有白色背景 我需要删除白色背景 我想我可以使所有白色像素透明 但我不知道该怎么做 我只想使用 html javascript 这是如何做到的 function white2transparent img var c
  • Spring IOC 和 Spring AOP 的区别

    有什么区别春季国际奥委会 and 春季AOP以及它们的重要性 您在网上搜索过 IoC 和 AOP 吗 有一个lot对两者的引用 简而言之 IoC 允许外部力量来决定代码将使用什么实现 而不是由代码决定实现 外力 可能是配置文件 单元测试 其
  • 为什么从 Unicode 字符集中删除了 U+D800 到 U+DFFF 范围内的代码点?

    我正在学习UTF 16编码 并且我读到如果你想表示U 10000到U 10FFFF范围内的代码点 那么你必须使用代理对 其范围在U D800至 U DFFF 假设我想对以下代码点进行编码 U 10123 二进制为 1000000010010
  • Python 中的随机数生成方法有何不同?

    生成随机数int在 Python 中 0 到 10 之间 我可以执行以下任意操作 import numpy as np print np random randint 0 10 or import random print random r
  • Google 关于推送通知的回应

    我正在创建一个用于 Google 日历集成的应用程序 当任何人手动更改 Google 日历事件时 我试图从 Google 获取通知 因此 我们在 Google 和我的应用程序之间创建了一个通道 现在的问题是 当 google 将响应标头发送
  • 如何编写通用方法来查找最大元素并调用该方法?

    当我试图解决运动问题时来自泛型教程问答 http docs oracle com javase tutorial java generics QandE generics answers html我的答案略有不同 我的回答 public s
  • 完成调试/编码后,如何处理 print()

    致Python专家 我使用了很多 print 来检查变量的值 完成后 我需要删除 print 它非常耗时并且容易出现人为错误 想了解一下你们如何处理 print 是编码时删除还是最后删除 或者有一种方法可以自动删除它或者您不使用 print
  • AngularJS 中的 Rails 路由参数

    我正在尝试构建一个不使用 ngView 的 AngularJS Rails 多页面应用程序 基本上 我想在我的 Rails 应用程序中使用 Angular 的数据绑定和其他功能 同时仍然拥有由我的 Rails 路由确定的视图 到目前为止 它
  • 分别计算每列的不同值

    我可以计算每列的不同值而不枚举它们吗 假设我有一张桌子col1 col2 col3 并且没有其他列 在不明确提及这些列的情况下 我希望得到与以下相同的结果 SELECT count distinct col1 as col1 count d
  • 不同航线如何使用相同的护照策略?

    假设我有这样的代码 var api1 require api1 var api2 require api2 var app express app use api1 api1 app use api2 api2 这是 api1 模块的代码
  • 斯坦福 NLP - VP 与 NP

    我有一个例子 斯坦福 NLP 为句子输出了一个奇怪的解析树 Clean my desk ROOT NP NP JJ Clean NP PRP my NN desk 正如你所看到的 它标记了这个词Clean作为依赖于动词的形容词desk整个短
  • 保持 OpenCV 2 和 OpenCV 3 之间的代码兼容性

    我的库当前使用 OpenCV 2 现在 我正在尝试编译该库以使用 OpenCV 3 似乎一些头文件被移动 一些常量被重命名 例如 CV INTER LINEAROpenCV 3 中未定义 由于我的库需要在 OpenCV 2 和 3 上编译和
  • AmazonRDSEnhancedMonitoringRole 的 Cloudformation 模板

    我正在尝试通过 Cloudformation 模板启动 RDS 堆栈 我想在我的数据库实例上启用增强监控 为了做到这一点 MonitoringRoleArn必须在资源上指定属性 据我了解 这个 ARN 应该指向一个 IAM 服务角色 该角色
  • python urllib2 urlopen 响应

    python urllib2 urlopen 响应
  • 在 eclipse RCP 中安装新插件/功能后,是否有任何方法可以自动从磁盘中清除旧插件/功能?

    我正在构建一个 RCP 应用程序 每个季度都会更新功能 插件 因此 如果用户选择自动更新功能 插件 则将下载更新插件的新 jar 但旧插件仍在使用我不再使用的磁盘空间 我厌倦了删除包含旧 jar 信息的安装历史记录 当我尝试删除它时 它向我
  • 我们什么时候应该使用 RxJS tap 运算符?

    我不明白从the docs https rxjs dev firebaseapp com api operators tap 有人能给我解释一下吗 大多数操作符都按流顺序工作 例如 source pipe map a string gt c