Я очень новичок в RxJava, хотя я знаком с потоками и немного с обещаниями Javascript. Я работаю с некоторым существующим кодом, используя RxJava, и некоторые комментарии, которые некоторые люди сделали по этому коду. Я хотел бы получить больше информации об этом, пока я продолжаю изучать документацию.
Блок, о котором идет речь, таков (некоторые имена изменены):
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.
create
/fromCallable
— это сторона источника, аblockingGet
— сторона потребителя, это две разные стороны, которые следует учитывать. 23.05.2018