原文链接: 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
*/