2016-11-20 10 views
27

this artcleによると、onCompleteonErrorの機能は互いに排他的です。最後に購読する

意味はonErrorまたはonCompleteのいずれかのイベントが私のsubscribeに発生します。
私はエラーを受け取った場合でも実行する必要があるロジックブロックを持っているか、情報のスチームを正常に終了しました。

私はfinally in pythonのようなものを探しましたが、私が見つけたのはfinallyです。これは私が作成した観測に添付する必要があります。

しかし、私は購読しているときだけ、そしてストリームが終了した後で、そのロジックがうまくいっているのかエラーがあるのか​​にかかわらず、そのロジックを実行したいと思っています。

アイデア?

答えて

40

私はfinally()の演算子が実際に正しいと思います。私が加入した場合にのみ

は、そのロジックを行い、ストリームは、私が考える問題ではありません

を終了した後:あなたが言います。必要に応じて、sourceを1つ作成し、登録する前にfinally()を使用することができます。

let source = Observable.create(observer => { 
    observer.next(1); 
    observer.error('error message'); 
    observer.next(3); 
    observer.complete(); 
}).publish(); 

source 
    .finally(() => console.log('Finally callback')) 
    .subscribe(
    value => console.log('#1 Next:', value), 
    error => console.log('#1 Error:', error), 
    () => console.log('#1 Complete') 
); 

source 
    .subscribe(
    value => console.log('#2 Next:', value), 
    error => console.log('#2 Error:', error), 
    () => console.log('#2 Complete') 
); 

source.connect(); 

これは、コンソールに出力します:

#1 Next: 1 
#2 Next: 1 
#1 Error: error message 
Finally callback 
#2 Error: error message 
+0

おかしい、私はその上で考えていませんでした、ありがとう –

+0

.finally()は、私の作品あなたが常に使用finally()に必要としていないこの方法で。ありがとうございました。 – STEEL

+1

興味深いことに、 'finally()'メソッドが最初に追加され、サブスクリプションが必然的に合格/不合格を強制するという点で、約束の反対のパターンです。 – BradGreens

関連する問題