看rxjs文档的时候,我总是被merge -> mergeAll -> mergeMap等类似的名称的操作符困扰。一直在思考这里面是不是有什么联系,结论:merge 与 (mergeAll && mergeMao)没有任何关系,就像这篇文章和白洁没有任何关系一样。
注:虽然每个操作符都会返回一个新的observables对象,但是每个操作符接受的参数都是上一个操作符返回的值,即上一个操作符完成后返回的新的observables的具体的value,也是上一个操作符中的函数返回的具体的值
merge mergeMap mergeAll
merge:用来合并两个Observables对象,有两种使用方式。函数签名: merge(input: Observable): Observable(注:函数签名很重要,这里能看到merge接受的参数是observable对象。
// RxJS v6+
import { mapTo } from 'rxjs/operators';
import { interval, merge } from 'rxjs';
// 每2.5秒发出值
const first = interval(2500);
// 每2秒发出值
const second = interval(2000);
// 每1.5秒发出值
const third = interval(1500);
// 每1秒发出值
const fourth = interval(1000);
// 从一个 observable 中发出输出值
const example = merge(
first.pipe(mapTo('FIRST!')),
second.pipe(mapTo('SECOND!')),
third.pipe(mapTo('THIRD')),
fourth.pipe(mapTo('FOURTH'))
);
// 输出: "FOURTH", "THIRD", "SECOND!", "FOURTH", "FIRST!", "THIRD", "FOURTH"
const subscribe = example.subscribe(val => console.log(val));
或者
// RxJS v6+
import { merge } from 'rxjs/operators';
import { interval } from 'rxjs';
// 每2.5秒发出值
const first = interval(2500);
// 每1秒发出值
const second = interval(1000);
// 作为实例方法使用
const example = first.pipe(merge(second));
// 输出: 0,1,0,2....
const subscribe = example.subscribe(val => console.log(val));
mergeAll
mergeAll: 收集并订阅所有的 observables; 函数签名:mergeAll(concurrent: number): Observable
可以说mergeAll与merge没有任何关系。merge的作用是merge(ob1, ob2, ob3)将多个observable对象合并为一个对象,这个对象按照三个对象的完成先后发出数据流。 mergeAll是作为操作符,对上游传出的数据流进行操作,而操作内容就是如果数据为observable对象则订阅该对象。mergeAll接受数字参数,表示同时最多“并发”订阅多少observable对象,剩下的将在下次进行订阅
发表回复