2017-09-24 15 views
3

ここでは、rxjsのforkJoinを使用して、オブザーバブルオブジェクトの配列を並行してサブスクライブしました。しかし、私はそれらを1つずつ購読したいと思います。何が最善の解決策になりますか?以下はオブザーバブル配列への順次サブスクリプション

は私のコードです:

var observables = []; 

Observable.forkJoin(observables) 
    .subscribe(() => { 
     this.msgs = []; 
     this.msgs.push({ 
      severity: 'success', 
      summary: 'Saved Successfully' 
     }); 
     this.onSaveComplete(); 
    }, (error: any) => this.errorMessage = <any>error); 
}, (error: any) => this.errorMessage = <any>error); 

答えて

1

forkJoinの代わりに、observablesの配列を順番に購読する必要があることを意味します。 mergeconcatは、この場合に行く方法です。あなたの場合、mergeconcatを使用している場合は、あなたのコードを変更し、観測オブジェクトの配列の始めにスプレッド演算子を使用します。

var observables = []; 
Observable.concat(...observables) 
      .subscribe(() => { 
       this.msgs = []; 
       this.msgs.push({ 
        severity: 'success', 
        summary: 'Saved Successfully' 
       }); 
       this.onSaveComplete(); 
      }, (error: any) => this.errorMessage = <any>error); 
    }, (error: any) => this.errorMessage = <any>error); 
+0

ありがとう、その作業:) –

0

依存要求のシリーズを作るためにthe switchMap operatorを使用してください。エラーが伝播し、チェーンの最後でエラーをキャッチしたり処理したりすることができます。

return this.http.get('something/1') 
    .switchMap(res1 => { 
    // use res1 if you need it 
    return this.http.get('something/2') 
    }) 
    .switchMap(res2 => { 
    // use res2 if you need it 
    return this.http.get('something/3') 
    }) 
    .subscribe(res3 => { 
    // use the final response 
    console.log(res3) 
    }) 
+0

お返事ありがとうございました。私はこの操作を動的にやりたい私は観察可能なアイテムの数が2または4または11などである可能性があることを意味し、動的にどのようにこの問題を解決できますか? –

+0

それは、次のリクエストを決定する際に以前の結果を使用するためのカスタムロジックに依存します。私はより多くの情報であなたを助けることができません。リクエストが互いに依存していない場合は、別のリクエストを開始する前に完了するのを待つ理由がないので、代わりに 'forkJoin'を使用するだけです。 –

関連する問題