rxjs 冷热两种模式

原创
10/29 22:49
阅读数 31

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 评论
0 收藏
0
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部