2017-10-02 20 views
1

I持って次のコード行:Rxjsはキャッチが呼び出されません後にサブスクライブ

this.initializer.initialize() 
    .catch((e) => { console.log('catch'); return Observable.empty() }) 
    .flatMap(() => { console.log('flatmap'); return this.route.params }) 
    .subscribe(() => { console.log('subscribe'); }) 

ログインして出力がflatMapを引き起こしている可能性が何

catch 

であり、その結果ではないにサブスクライブと呼ばれる?他のコードがここで関連しているかどうかわからない、何かが必要な場合は、私はそれを供給します。

答えて

2

これは明らかに、 error通知を送信することによって発生します(これは意図していますか?)。

catchオペレータは、errorの通知に反応し、nextではなく、completeと反応します。

flatMap()オペレータは、nextの通知に反応し、errorではなく、completeと反応します。

subscribeあなたの電話番号はnextです。あなたがcatchを使用していて、エラーハンドラはとにかく呼び出されませんので、それは加入者に到達したことがないので、あなたは基本的にObservable.empty()でエラーを置き換えるしかし

.subscribe(
() => console.log('subscribe'), 
    err => console.log('error:', err), 
) 

:あなたはまた、error秒を処理するために、それを書き換えることができます。

+0

'.catch(e => Observable.of(e))' – martin

+0

.catchがエラーを次のものに変える場合、フラットマップを作成しないでください上記のコードで呼び出すことができますか? あなたの提案はうまくいきますが、この醜いコードは私に残されています:https://gist.github.com/Burgov/a1c06e79a1d233f90b87ffe32902d9e9、私は次とエラーのために同じハンドラを持っています。 –

+0

これは本当です。エラーオブジェクトとともに 'flatMap'が呼び出されます。 – martin

関連する問題