typescript - 看不到 RXJS 如何确定在多个订阅上重复共享操作的哪一部分
问题描述
学习文档中讨论的运算符share()显示了两个示例,说明使用它和不使用它的结果如何。我理解为什么副作用只显示一次 - 这是因为我们共享源。我也尝试检查官方文档,但它给了我一点智慧。
我不明白为什么我们会看到每个订阅的主要结果。我知道这是预期的结果,但我看不出计算机如何知道什么是副作用和什么是主要影响。
const source = timer(1000);
const example = source.pipe(
tap(() => console.log("side-effect)),
mapTo("main-effect")
);
const shared = example.pipe(share());
const go1 = shared.subscribe(val => console.log(val));
const go2 = shared.subscribe(val => console.log(val));
解决方案
如果我理解你的问题是正确的,那么答案很简单:share() 运算符之前的所有内容都只会执行一次。share() 运算符之后的所有内容都将执行与订阅一样多的次数。
在上面的示例中,首先将只有一个从计时器初始化的流。每一秒你都会有一个事件,首先是点击,然后是 mapTo,然后是共享。共享后,流分成两个不同的流,每个订阅一个。
timer -> tap -> mapTo -> share -> 分成两个不同的流
mapTo 运算符创建一次字符串“main-effect”,然后将其发送到管道中。当流被一分为二时,字符串“main-effect”被复制并发送给两个订阅者,这就是他们都收到字符串的原因。
推荐阅读
- .net-core - 实现 Google Calendar API 以获取 ASP.NET 核心中的事件列表
- sql - How to Extract Each Component in Array using Hive
- java - 使用java本机接口获取windows当前用户
- azure - 在 Service Fabric 中,可靠队列是否仅适用于相同的服务类型?
- c - 从没有“零”保存的稀疏矩阵中打印矩阵线
- social-tables - 现在是否允许在第三方应用程序上授予刷新令牌?
- git - Git:处理重命名大量文件的最佳方法
- php - PHP插入没有主键的json对象
- c# - 如果直到运行时才知道对象的名称,如何引用对象的属性?
- c# - 如何将列表字符串传递给 TempData Asp.Net