派生流的最新组合
Lasest combination of derived streams
我有 3 个流,一个是主流 s1,还有两个派生流。我想获得这个流的最新组合。
const O = Rx.Observable
let s1$ = O.from([1,2,3])
let s2$ = s1$.map(x => x*10)
let s3$ = s1$.map(x => x*100)
let s$ = O.combineLatest(s1$, s2$, s3$, (s1, s2, s3) => {
//console.log('s1, s2', s1, s2, s3)
return s1 + s2 + s3
})
s$.subscribe(x => {
console.log('s = ' + x)
})
输出为:
"s = 111"
"s = 112"
"s = 122"
"s = 222"
"s = 223"
"s = 233"
"s = 333"
但我想要的是:
"s = 111"
"s = 222"
"s = 333"
所以只有 last 和 s1 及其从 s2 和 s3 派生的值。实现它的最佳方法是什么?
一个fiddle:
https://jsbin.com/haduvedule/edit?js,console,output
你必须 share
s1$ observable。即您的代码变为:
console.clear()
const O = Rx.Observable
let s1$ = O.from([1,2,3]).share()
let s2$ = s1$.map(x => x*10).delay(10000)
let s3$ = s1$.map(x => x*100)
let s$ = O.zip(s1$, s2$, s3$, (s1, s2, s3) => {
//console.log('s1, s2', s1, s2, s3)
return s1 + s2 + s3
})
s$.subscribe(x => {
console.log('s = ' + x)
})
为什么已经在 SO 上进行了广泛讨论,我鼓励看一下 之间的区别。它是 Rx 的关键概念,也是新手常见的绊脚石。
我有 3 个流,一个是主流 s1,还有两个派生流。我想获得这个流的最新组合。
const O = Rx.Observable
let s1$ = O.from([1,2,3])
let s2$ = s1$.map(x => x*10)
let s3$ = s1$.map(x => x*100)
let s$ = O.combineLatest(s1$, s2$, s3$, (s1, s2, s3) => {
//console.log('s1, s2', s1, s2, s3)
return s1 + s2 + s3
})
s$.subscribe(x => {
console.log('s = ' + x)
})
输出为:
"s = 111"
"s = 112"
"s = 122"
"s = 222"
"s = 223"
"s = 233"
"s = 333"
但我想要的是:
"s = 111"
"s = 222"
"s = 333"
所以只有 last 和 s1 及其从 s2 和 s3 派生的值。实现它的最佳方法是什么?
一个fiddle: https://jsbin.com/haduvedule/edit?js,console,output
你必须 share
s1$ observable。即您的代码变为:
console.clear()
const O = Rx.Observable
let s1$ = O.from([1,2,3]).share()
let s2$ = s1$.map(x => x*10).delay(10000)
let s3$ = s1$.map(x => x*100)
let s$ = O.zip(s1$, s2$, s3$, (s1, s2, s3) => {
//console.log('s1, s2', s1, s2, s3)
return s1 + s2 + s3
})
s$.subscribe(x => {
console.log('s = ' + x)
})
为什么已经在 SO 上进行了广泛讨论,我鼓励看一下