2017-09-19 18 views
0

私はRXストリームによって例外がキャッチされる方法を理解しようとしています。特に、サブスクリプション内でサブスクリプションがあり、内部サブスクリプションがそれから観測可能な例外を受け取った場合、内部サブスクリプションに対してonErrorで処理する必要がありますか、それとも親サブスクリプションのonErrorで処理できますか?あなたのケースではRX2.0ネストされたサブスクリプションのエラー処理

observableThing1.subscribe({ _ -> 
    observableThing2.subscribe({ _ -> 
     // Something horrible happens here an an exception is throw by observableThing2 
    }) 
}, { error -> 
    // Expecting I can handle all errors at the top most subscription 
}) 

答えて

1

、あなたはすべてのsubscriptionためonErrorを処理する必要があるだろう:

observable1Thing().subscribe({ obs1Result -> 

     observable2Thing().subscribe({ obs2Result -> 

     }, { obs2Error -> 

     }) 


    }, { obs1error -> 

    }) 

あなたはflatMapのような演算子でobservablesを組み合わせたい場合は、あなただけの1 subcriptionを必要とするだろうし、 1つだけonErrorケースを処理します。 どのオペレータを使用するかは、observablesをどのように組み合わせるかによって異なります。

例:

obs1().flatMap { obs2() }.subscribe({ 

    }, { error -> 

    })