【发布时间】:2018-05-22 16:28:49
【问题描述】:
我对 RxJava 非常陌生,虽然我熟悉流,并且对 Javascript 承诺有些熟悉。我正在处理一些使用 RxJava 的现有代码,以及一些人对这些代码所做的一些 cmets。我想了解更多这方面的背景知识,同时我会继续吸收文档。
有问题的块是这样的(一些名称已更改):
public ShippingMethodHolder callClientsAsync(ShippingMethodContext shippingContext) {
Single<ShippingMethodResponse> productOneResponseEntity = Single.<ShippingMethodResponse>create(source -> {
source.onSuccess(getProductOneowShippingMethodResponse(shippingContext));
}).subscribeOn(Schedulers.io());
Single<ShippingMethodResponse> productTwoResponseEntity = Single.<ShippingMethodResponse>create(source -> {
source.onSuccess(getProductTwoShippingMethodResponse(shippingContext));
}).subscribeOn(Schedulers.io());
Single<ShippingMethodHolder> singleProductCartResponseHolder = Single.zip(productOneResponseEntity, productTwoResponseEntity,
(dtvResponse, productTwoResponse) -> {
return new ShippingMethodHolder(dtvResponse, productTwoResponse);
});
return singleProductCartResponseHolder.blockingGet();
}
对此代码有更多了解的人对这段代码的评论基本上是说这缺少 RxJava 异常处理“并将导致流的阻塞或崩溃”。我想这是指两个异步调用有“onSuccess()”调用,但没有“onError()”调用。
但是,这对我来说似乎很奇怪。 "onSuccess()" 被调用的范围不是业务逻辑成功或失败,而是似乎在 RxJava 尝试进行异步调用。
对于从 RxJava 的角度来看这是否真的是一个问题,我可以提出一些建议。
【问题讨论】: