【发布时间】:2023-03-05 01:23:01
【问题描述】:
这是真的吗?我目前有点困惑: 基于另一个热门 observable 制作(合并、扫描、映射、过滤...)的 observable 肯定很热门?
如果我将 hot 和 cold observable 合并在一起会怎样?新观测到的是热还是冷?
编辑:测试,结果不是预期的
var source = Rx.Observable.fromEvent(window, 'mousemove')
.merge(Rx.Observable.from([1,2,3,4,5]))
.scan(acc=>++acc, 0);
setTimeout(()=>{
source.subscribe(x=>{
console.log('sub1', x)
})
}, 4000)
setTimeout(()=>{
source.subscribe(x=>{
console.log('------sub2', x)
})
}, 6000)
正如 paulpdaniels 在他的回答中提到的,mousemove 应该是一个热门的 observable,因此即使没有订阅它也应该发出值。
但在上面的代码示例中,我将订阅延迟了 4 秒和 6 秒。因此,当应用程序启动时,我会四处移动鼠标。当它到达第 4 秒时,它会注销:
"sub1" 1
"sub1" 2
"sub1" 3
"sub1" 4
"sub1" 5
为什么从1开始??它不应该累积 4 秒的值吗?根据我的理解,它应该从一个更大的数字开始。
当它到达第 6 秒时,它会注销:
"------sub2" 1
"------sub2" 2
"------sub2" 3
"------sub2" 4
"------sub2" 5
为什么?这不意味着 mousemove 是冷可观察的吗?或者问题出在scan 操作员上??
PS:我使用的是 rxjs 5
【问题讨论】:
标签: rxjs observable