merge和concat区别

Rxjs中merge和concat区别:

1、相同点:

都是将多个可观察输入对象合并为一个可观测输出对象,通过订阅获取输入客观擦对象的弹出的值;

 concat中只要有一个输入可观察对象发生错误,其后面的输入可观察对象无法弹出其值,即订阅终止;merge存在竞争关系,有一个输入可观察对象发生错误,也会 终止订阅。

2、不同点:

merge是并联,同步发生,存在竞争关系;concat是串联,按照输入顺序,第一个可观测对象的值弹出完全后,接着开始弹出第二个可观察对象,依次输出。

3、事实上,concat相当于将并发参数设置为1的merge操作符,即 concat(inputObv1,inputObv2, inputObv3, ....) === merge(inputObv1,inputObv2, inputObv3, ...., 1)

  

 1 const o1 = new Observable<string>(observer => {
 2       timer(200).subscribe(() => {
 3         observer.next('2s');
 4         observer.error('error 第一个输入可观擦对象报错,后续可观擦对象终止订阅');
 5         observer.complete();
 6       });
 7     });
 8   
 9     const o2 = new Observable<string>(observer => {
10       timer(1000).subscribe(() => {
11         observer.next('1s');
12         observer.complete();
13       });
14     });
15     
16     concat(o1, o2).subscribe({
17       next(value) {
18         console.log('value: ', value);
19       },
20       error(reason) {
21         console.log('reason:', reason);
22       },
23       complete() {
24         console.log('complete');
25       }
26     });
27     
28     merge(o1, o2, 1).subscribe({
29       next(value) {
30         console.log('value: ', value);
31       },
32       error(reason) {
33         console.log('reason:', reason);
34       },
35       complete() {
36         console.log('complete');
37       }
38     });
39   }

猜你喜欢

转载自www.cnblogs.com/szy-du/p/11204274.html