gpt4 book ai didi

android - 仅在接收到第二个 Observable 后才发出 Observable

转载 作者:搜寻专家 更新时间:2023-11-01 08:33:41 25 4
gpt4 key购买 nike

我使用 Rx 通过 Retrofit 调用我们的 API。在某些时候我需要调用我们的 API,等待响应 1,从中提取一些元数据,然后再次调用 API 等待响应 2。在我有响应 2 之后,我可以发出我的 Observable。我的问题是,我不知道如何:进行调用 2 并仅在我有响应 2 后才发出

这是我的类中的函数,它们应该发出 Model Observable。方法 get2 不必对外界可见。

public Observable<Model> get1(String slug) {
return api1
.getInfo(slug)
.subscribeOn(Schedulers.io())
.map(resonse1 -> {
String metadata = response1.getMetadata();

//Make call2 with metadata
//call(2)

Model model = response1.getModel();
model.setInfo(/*Info from call2*/)

return model;
})
.observeOn(AndroidSchedulers.mainThread());
}


private Observable<Info> get2(String metadata) {
return api2.getInfo(new InfoAsset(metadata))
.subscribeOn(Schedulers.io())
.map(response2 -> {
return response2.getInfo;
})
.observeOn(AndroidSchedulers.mainThread());
}

最佳答案

使用 flatMap 代替 map:

.flatMap(response1 -> {
String metadata = response1.getMetadata();
return get2(metadata)
.map(info -> {
Model model = response1.getModel();
model.setInfo(info);
return model;
});
})
...

不过要小心,因为您正在跨线程使用可变对象,所以您可能会遇到可见性问题。考虑使用不可变对象(immutable对象)或确保同步更改。

关于android - 仅在接收到第二个 Observable 后才发出 Observable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38427833/

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