Mar*_*sen 6 reactive-extensions-js rxjs rxjs5
我有一组可更改的子组件(POJO 对象),每个组件都有自己的状态流。每次用户触发 addChild/removeChild/clearChildren 时,都会使用 #switchMap 发出一组新的子状态流。到目前为止,一切都很好!(对 RxJS 感到非常惊讶!)
只要不是空数组Rx.Observable.from(arrayOfStateStreams).combineAll(),我就能得到很好的结果。arrayOfStateStreams
由于这是在更高级别上组合(最新)的部分状态,因此我需要发出一个空数组,否则全局状态树将包含不再正确的旧状态数据!
我可以发出一些保留令牌,例如['EMPTY-ARRAY-PLACEHOLDER-TOKEN'],但这很奇怪。更好的方法是始终将最后一个流附加到数组中,因此最后一个索引可以被视为垃圾。但仍然令人困惑的代码和状态。使用[null]是不行的,因为我们可能有一个子状态'null'.
谁能用好的方法解决这个问题?因为#combineAll 之后不应该有其他空数组的表示,所以不能支持这一点吗?
感谢github 用户 trxcllnt,他提供了以下答案:
除非组合的 Observables 发出至少一个值,否则 mergeAll 不会发出,但您可以检查以确保要组合的集合是否为空,并且组合或发出一个空数组:
Run Code Online (Sandbox Code Playgroud)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') })
| 归档时间: |
|
| 查看次数: |
3416 次 |
| 最近记录: |