gpt4 book ai didi

java - 如何调用依赖于 rx 网络调用的非 rx 网络调用

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:13:26 25 4
gpt4 key购买 nike

我有一个返回 Observable 的网络调用,我有另一个网络调用,它不是依赖于第一个 Observable 的 rx,我需要以某种方式转换这一切都与 Rx 相关。

Observable<Response> responseObservable = apiclient.executeRequest(request);

执行后,我需要执行另一个不返回 Observable 的 http 调用:

responseObservable.map(response - > execute the no rx network call using the response.id) 

noRxClient.getInformation(response.id, new Action1<Information>() {
@Override
public void call(Information information) {
//Need to return information with page response
}
});

然后我需要调用这个方法来呈现响应

renderResponse(response, information);

如何将非 rx 调用与 rx 连接起来,然后使用 RxJava 调用渲染响应?

最佳答案

您可以使用 Observable.fromEmitter (RxJava1) 或 Observable.create (RxJava2) 将异步非 rx 调用包装到 Observable 中,并且Observable.fromCallable(对于非异步调用):

private Observable<Information> wrapGetInformation(String responseId) {
return Observable.create(emitter -> {
noRxClient.getInformation(responseId, new Action1<Information>() {
@Override
public void call(Information information) {
emitter.onNext(information);
emitter.onComplete();
//also wrap exceptions into emitter.onError(Throwable)
}
});
});
}

private Observalbe<RenderedResponse> wrapRenderResponse(Response response, Information information) {
return Observable.fromCallable(() -> {
return renderResponse(response, information);
//exceptions automatically wrapped
});
}

并使用 overloaded flatMap 组合结果运算符(operator):

apiclient.executeRequest(request)
.flatMap(response -> wrapGetInformation(response.id),
(response, information) -> wrapRenderResponse(response, information))
)
//apply Schedulers
.subscribe(...)

关于java - 如何调用依赖于 rx 网络调用的非 rx 网络调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42237694/

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