lng*_*ngs 4 reactive-programming rxjs rxjs5
我Rx.Observable从一系列事件中创建了一个:
Rx.Observable.fromEvent(recognizeStream, 'data')
Run Code Online (Sandbox Code Playgroud)
其中每个数据事件如下所示:
{ error: null, alternatives: [result1, result2, result3] }
Run Code Online (Sandbox Code Playgroud)
我想在数组中获取每个值alternatives并将它们合并到流中.我需要看哪些操作员?
据我所知,flatMap并且concatMap可以完成这项工作,但我从他们的例子中得不到这个想法.
有人可以解释我应该使用哪个运算符并向我提供一个示例吗?
Mar*_*ten 11
xxxMap()运营商家族都处理高阶Observables.这意味着它们允许您在主Observable中创建Observable并将结果值内联到主流中.所以你可以读取类型签名Observable<Observable<T>> => Observable<T>
给定一个流,每个排放x是一个包含4个值排放的Observable:
input: --x----------x
flatMap a-a-a-a-| b-b-b-b-|
result: --a-a-a-a----b-b-b-b-|
Run Code Online (Sandbox Code Playgroud)
该xxxMap()运营商所有类型的工作成果Observable,Promise或Array.根据您输入的内容,如果需要,它将转换为Observable.
Rx.Observable.of('')
.flatMap(() => [1,2,3,4])
.subscribe(val => console.log('array value: ' + val));
Rx.Observable.of('')
.flatMap(() => Promise.resolve(1))
.subscribe(val => console.log('promise value: ' + val));
Rx.Observable.of('')
.flatMap(() => Promise.resolve([1,2,3,4]))
.subscribe(val => console.log('promise array value: ' + val));
Rx.Observable.of('')
.flatMap(() => Rx.Observable.from([1,2,3,4]))
.subscribe(val => console.log('Observable value: ' + val));Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.0.3/Rx.js"></script>Run Code Online (Sandbox Code Playgroud)
在您的情况下,您可以轻松地flatMap对象并返回数组:
Rx.Observable.of({ error: null, alternatives: ['result1', 'result2', 'result3'] })
.flatMap(val => val.alternatives)
.subscribe(console.log);Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.0.3/Rx.js"></script>Run Code Online (Sandbox Code Playgroud)
flatMap如,更好地mergeMap将merge所有排放每当他们进入主流.
concatMap将concat在下一个流之前等待所有排放完成:
但是当新的发射可用时,switchMap将放弃上一个流,并切换为从新流发出值:
| 归档时间: |
|
| 查看次数: |
7032 次 |
| 最近记录: |