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   }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM