rxjs 冷热两种模式

原文链接: rxjs 冷热两种模式

上一篇: DLX 求解数独

下一篇: lz-string 面向localstorage的字符串压缩库

https://www.cnblogs.com/starof/p/10505617.html

冷模式

类似点播模式, B站看番剧, 每次都是从头开始

每一个订阅者都单独对应一个实例, 并且只有在订阅后才会开始传送值

好处是多个订阅者直接不影响, 且无关先后都能收到全部的数据

坏处是多个订阅者在不同的时间收到的数据是不一致的

const { timer } = require("rxjs")
const { publish, tap } = require("rxjs/operators")

const $sub = timer(0, 1000)

setTimeout(() => {
  $sub.subscribe(v => console.log("v1", v))
  setTimeout(() => {
    $sub.subscribe(v => console.log("v2", v))
  }, 5000)
}, 5000)

/*
v1 0
v1 1
v1 2
v1 3
v1 4
v2 0
v1 5
v2 1
v1 6
v2 2
v1 7
v2 3
v1 8
v2 4
v1 9
v2 5
v1 10
v2 6
v1 11
v2 7
v1 12
v2 8
v1 13
v2 9
v1 14
v2 10
v1 15
v2 11
v1 16
v2 12
v1 17
v2 13
v1 18
*/

热模式

类似直播模式, 每次进来看到的都是最新的

所有订阅者都对应同一个发布者, 发布者在connect时开始传送数据

当我们在一些场景中, 需要所有的订阅者无论订阅的先后都在同一时间收到相同的数据可以使用热门式

const { timer } = require("rxjs")
const { publish, tap } = require("rxjs/operators")

const $sub = timer(0, 1000).pipe(publish())
setTimeout(() => {
  console.log("开始传送数据")
  $sub.connect()
}, 2000)

setTimeout(() => {
  $sub.subscribe(v => console.log("v1", v))
  setTimeout(() => {
    $sub.subscribe(v => console.log("v2", v))
  }, 5000)
}, 5000)

/**
开始传送数据
v1 3
v1 4
v1 5
v1 6
v1 7
v1 8
v2 8
v1 9
v2 9
v1 10
v2 10
v1 11
v2 11
v1 12
v2 12
v1 13
v2 13
v1 14
v2 14
v1 15
v2 15
v1 16
v2 16

 */

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值