我如何使用 map() 来处理 RxJava2 的错误?
How do i use map() for errors with RxJava2?
我正在设计一个功能,允许检查 Android 设备上的互联网连接。我决定使用反应式方法来实现它。
该功能非常好用并且非常简单:它只是尝试为后端解析 IP,如果 DNS 请求失败,则 returns false
,成功时 true
。
这是函数的代码:
fun isConnectedToInternet(): Single<Boolean> {
// Just check whether we can resolve IP for our target API endpoint
return Single
.defer{Single.just(InetAddress.getByName(API_URL).toString())}
.subscribeOn(Schedulers.io())
// Trick to map an error to just a false value
.onErrorReturnItem("Error")
.map { it != "Error" }
}
问题是最后两行是否被认为是一种好的做法,如果不是,那么以更好的方式做我想做的事情的正确选择是什么?
你的代码很不错,但如果我是你,我会这样写:
fun isConnectedToInternet(): Single<Boolean> {
// Just check whether we can resolve IP for our target API endpoint
return Completable
.fromCallable { InetAddress.getByName(API_URL) }
.subscribeOn(Schedulers.io())
.toSingle { true }
.onErrorReturnItem(false)
}
我正在设计一个功能,允许检查 Android 设备上的互联网连接。我决定使用反应式方法来实现它。
该功能非常好用并且非常简单:它只是尝试为后端解析 IP,如果 DNS 请求失败,则 returns false
,成功时 true
。
这是函数的代码:
fun isConnectedToInternet(): Single<Boolean> {
// Just check whether we can resolve IP for our target API endpoint
return Single
.defer{Single.just(InetAddress.getByName(API_URL).toString())}
.subscribeOn(Schedulers.io())
// Trick to map an error to just a false value
.onErrorReturnItem("Error")
.map { it != "Error" }
}
问题是最后两行是否被认为是一种好的做法,如果不是,那么以更好的方式做我想做的事情的正确选择是什么?
你的代码很不错,但如果我是你,我会这样写:
fun isConnectedToInternet(): Single<Boolean> {
// Just check whether we can resolve IP for our target API endpoint
return Completable
.fromCallable { InetAddress.getByName(API_URL) }
.subscribeOn(Schedulers.io())
.toSingle { true }
.onErrorReturnItem(false)
}