RxJava2 Flowable onErrorReturn 未调用
RxJava2 Flowable onErrorReturn not called
说我需要用 Flowable 包装 BroadcastReceiver
:
Flowable
.create<Boolean>({ emitter ->
val broadcastReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
throw RuntimeException("Test exception")
}
}
application.registerReceiver(broadcastReceiver, IntentFilter(LocationManager.PROVIDERS_CHANGED_ACTION))
}, BackpressureStrategy.MISSING)
.onErrorReturn { false }
然后我需要在一个地方捕获 Flowable 中抛出的任何异常。
我认为 onErrorReturn
应该能够在 broadcastReceiver 中捕捉到 throw RuntimeException("Test exception")
但它没有捕捉到那个异常和应用程序崩溃。
当然,我可以用 try/catch
将任何内容包装在 BroadcastReceiver 中。但实际上,我那里有很多源代码,所以添加 try/catch
会使源代码变得非常混乱。
有什么方法可以在一个地方捕获Flowable中任何一行抛出的所有异常吗?
如果 Flowable#create()
遵循 Flowable
的契约,如果你有错误并想通过流传递它,你需要捕获它并调用 emitter.onError()
。如果这样做,Flowable.onErrorReturn()
将按预期开始工作。
要正确 register/unregister BroadcastReceiver
并处理异常,您可以使用该方法
Flowable
.create<Boolean>({ emitter ->
val broadcastReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
try {
throw RuntimeException("Test exception")
} catch(e: Throwable) {
emitter.tryOnError(e)
}
}
}
try {
application.registerReceiver(broadcastReceiver, IntentFilter(LocationManager.PROVIDERS_CHANGED_ACTION))
emitter.setCancellable {
application.unregisterReceiver(broadcastReceiver)
}
} catch (e: Throwable) {
emitter.tryOnError(e)
}
}, BackpressureStrategy.MISSING)
.onErrorReturn { false }
说我需要用 Flowable 包装 BroadcastReceiver
:
Flowable
.create<Boolean>({ emitter ->
val broadcastReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
throw RuntimeException("Test exception")
}
}
application.registerReceiver(broadcastReceiver, IntentFilter(LocationManager.PROVIDERS_CHANGED_ACTION))
}, BackpressureStrategy.MISSING)
.onErrorReturn { false }
然后我需要在一个地方捕获 Flowable 中抛出的任何异常。
我认为 onErrorReturn
应该能够在 broadcastReceiver 中捕捉到 throw RuntimeException("Test exception")
但它没有捕捉到那个异常和应用程序崩溃。
当然,我可以用 try/catch
将任何内容包装在 BroadcastReceiver 中。但实际上,我那里有很多源代码,所以添加 try/catch
会使源代码变得非常混乱。
有什么方法可以在一个地方捕获Flowable中任何一行抛出的所有异常吗?
如果 Flowable#create()
遵循 Flowable
的契约,如果你有错误并想通过流传递它,你需要捕获它并调用 emitter.onError()
。如果这样做,Flowable.onErrorReturn()
将按预期开始工作。
要正确 register/unregister BroadcastReceiver
并处理异常,您可以使用该方法
Flowable
.create<Boolean>({ emitter ->
val broadcastReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
try {
throw RuntimeException("Test exception")
} catch(e: Throwable) {
emitter.tryOnError(e)
}
}
}
try {
application.registerReceiver(broadcastReceiver, IntentFilter(LocationManager.PROVIDERS_CHANGED_ACTION))
emitter.setCancellable {
application.unregisterReceiver(broadcastReceiver)
}
} catch (e: Throwable) {
emitter.tryOnError(e)
}
}, BackpressureStrategy.MISSING)
.onErrorReturn { false }