gpt4 book ai didi

java - 在这个简单的 RxJava 异步场景中我真的需要异常处理吗?

转载 作者:行者123 更新时间:2023-12-02 11:13:07 27 4
gpt4 key购买 nike

我对 RxJava 非常陌生,尽管我熟悉流并且对 Javascript Promise 有所了解。我正在使用 RxJava 处理一些现有代码,以及一些人对该代码所做的一些评论。在继续阅读文档的同时,我想了解更多这方面的背景知识。

有问题的 block 是这样的(一些名称已更改):

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主要是为了将异步源与响应式(Reactive)世界联系起来,但是您的代码似乎会阻塞地调用某些内容只是为了发出其值的信号。为此,fromCallable更合适,并且更好地向读者传达意图:

Single<ShippingMethodResponse> productOneResponseEntity = 
Single.<ShippingMethodResponse>fromCallable(() ->
getProductOneowShippingMethodResponse(shippingContext)
)
.subscribeOn(Schedulers.io());

根据您的应用程序类型,阻塞式等待结果可能并不理想,尤其是从 UI 线程调用该方法时。您可以返回压缩的 Single并继续创作直到 final subscribe()可以发出。

The comment made about this code from people more informed about this essentially says that this is missing RxJava exception handling "and will cause blocking or crashing of the stream"

原文createfromCallable将捕获您的异常并尝试向消费者发出信号。在这种情况下,blockingGet将重新抛出调用者线程上的源异常之一,另一个(如果有)将被路由到全局 RxJavaPlugins.onError处理程序。他们可能意味着你的方法的调用者通常不希望它抛出异常,因此他们可能会省略它周围的 try-catch 并在运行时严重失败。解决这个问题实际上取决于您想要在应用程序中进行哪种类型的错误管理。

关于java - 在这个简单的 RxJava 异步场景中我真的需要异常处理吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50472498/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com