2016-04-24 17 views
1

http-callsのObservableシーケンスでfinallyステートメントを実行しようとします。最後に、rxjsシーケンスが最初のエラーで実行されます

finallyメソッドは最初のエラーで実行され、完全なシーケンスが終了したときには実行されません。

deleteLeistungsTarife(
    leistungsTarife: Shopeinstellungen.LeistungsTarif[], 
    leistungstarifGeloeschtCallback: (leistungsTarif: Shopeinstellungen.LeistungsTarif) => any) { 
    let observerListe: Observable<number>[] = []; 
    leistungsTarife.forEach((lt) => observerListe.push(
     this.http.delete(this._leistungenUrl + '/DeleteLeistungsTarif/' + lt.tarifLeistungId) 
      .map(res => leistungstarifGeloeschtCallback(lt)) 
      .catch(this.handleError)     
    )); 
    return Observable.forkJoin(observerListe).finally(()=>console.log("finally")); 
} 

このメソッドの呼び出しは次のようになります/

this._leistungenService.deleteLeistungsTarife(
     zuLoeschendeTarife, leistungsTarif => { 
      console.log("gespeichert: ", leistungsTarif) 
     } 
    ).subscribe(
     (r) => console.log("liste result:", r), 
     (e) => console.log("liste error:", e), 
     () => console.log("complete") 
    ) 

はなくても、エラーはありません最初に観察が終了した後、最終的には完全なコンソールログが打撃を受けますこれに代わる機能はありますか?

答えて

2

これは、finally機能の期待された、文書化された動作です。 documentationを確認してください。

ソースの観測可能シーケンスが正常に終了するか例外的に終了した後で、指定されたアクションを呼び出します。次の文法に従うオブザーバオブジェクトのインスタンスに送信

メッセージ:Rxjs文法によってまた

、のみcompletion when an error occursを意味観察によって放出されたつのエラーが存在することができるonNext *(onCompleted | onError)?

この文法により、観測可能なシーケンスは、購読オブザーバインスタンスに任意の量(0以上)のonNextメッセージを送信し、任意に1つの成功(onCompleted)または失敗(onError)メッセージが続きます。

観察可能なシーケンスが完了したことを示す単一のメッセージは、観察可能なシーケンスの消費者がクリーンアップ操作を実行することが安全であることを確定的に確かめることができることを保証する。

複数の観測可能なシーケンスで動作する演算子のアボートセマンティクスを確実に維持できます。

のみに観察が終了すると、次の2つの主要な技術を使用することができます関数を呼び出すには:onNextonErrorを治療するためのmaterializeを使用

  • doOnCompleted
  • を、そして定期的な値(およびdematerializeとしてonCompleted正常な行動を取り戻すため)。あなたの特定のケースで

しかし、私はアプローチがにあると信じて:リターン、(つまりは、投げたり強制的にストリームを終了していない

  • catchエラー、エラーコードでエラーを置き換えますエラーをカプセル化する値)。そうすれば、ソースは正常に完了し、forkJoinにもなります。

あなたのハンドラのコードは表示されませんが、おそらく観測対象が終了すると思いますか?その場合、エラーコードを返し、resultSelectorパラメータがforkJoinで終了したすべてのコールの値を分析することができます。

関連する問題