gpt4 book ai didi

rxjs - combineAll 不会在空数组上发出

转载 作者:行者123 更新时间:2023-12-01 13:42:01 26 4
gpt4 key购买 nike

JSBIN Sample

我有一组可变的子组件(POJO 对象),每个子组件都有自己的状态流。每次用户触发 addChild/removeChild/clearChildren 时,都会使用 #switchMap 发出一组新的子状态流。到现在为止还挺好! (对 RxJS 如此惊讶!)

Rx.Observable.from(arrayOfStateStreams).combineAll()只要arrayOfStateStreams我得到一个好的结果不是空数组。

由于这是在更高级别上组合(最新)的部分状态,我需要发出一个空数组,否则全局状态树将包含不再为真的旧状态数据!

我可以发出一些保留 token ,如 ['EMPTY-ARRAY-PLACEHOLDER-TOKEN'] ,但这只是奇怪。
更好的方法是始终将最后一个流附加到数组中,以便将最后一个索引视为垃圾。尽管如此,代码和状态仍然令人困惑。
使用 [null]不行,因为我们可以有一个 'null' 的子状态.

谁能以好的方式解决这个问题?这不能被支持,因为在#combineAll 之后不应该有空数组的其他表示?

最佳答案

积分转至 github user trxcllnt who provided the following answer :

combineAll won't emit unless the combined Observables emit at leastone value, but you could check to ensure the collection you'recombining is empty or not, and either combine or emit an empty Array:

 var arrayOfStreamsStream = Rx.Observable
.of(
[], [
Rx.Observable.of('blah-1'), // component state.
Rx.Observable.of('blah-2'),
Rx.Observable.of('blah-3')
], [], [
Rx.Observable.of('foo-1'),
Rx.Observable.of('qux-2')
]
)
.switchMap(function onMap(coll) {
return coll.length === 0 ?
Observable.of(coll) :
Observable.combineLatest(...coll);
})
.subscribe(function onSubscribe(data) {
console.log('onSubscribe START')
console.dir(data)
console.log('onSubscribe END')
})

关于rxjs - combineAll 不会在空数组上发出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39231343/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com