RxJava两个顺序请求
我有两个请求,第二个是it依赖,第一个是it依赖,所以,如何按顺序进行,因为如果它并行请求,则有一些检查将接收nullRxJava两个顺序请求,java,android,rx-java,system.reactive,rx-android,Java,Android,Rx Java,System.reactive,Rx Android,我有两个请求,第二个是it依赖,第一个是it依赖,所以,如何按顺序进行,因为如果它并行请求,则有一些检查将接收null Observable<Map<Integer, SupportedVersion>> supportedVersionObservable = contentAPI .getSupportedVersionsContent() .compose(ReactiveUtils.applySche
Observable<Map<Integer, SupportedVersion>> supportedVersionObservable = contentAPI
.getSupportedVersionsContent()
.compose(ReactiveUtils.applySchedulers())
.map(supportedVersionsContentContentContainer -> supportedVersionsContentContentContainer.getContent().get(0).getMessage())
.doOnNext(supportedVersionsMap -> {
Timber.i("doOnNext invoked from supported version observable");
for (Map.Entry<Integer,SupportedVersion> entry : supportedVersionsMap.entrySet())
if (Build.VERSION.SDK_INT >= entry.getKey())
model.setSupportedVersion(entry.getValue());
model.setCurrentVersionExpiryDate(model.getSupportedVersion().getCurrentVersionExpiryDate());
if (model.getSupportedVersion() != null)
model.setNewFeaturesSeen(sharedPreferencesManager.isNewFeaturesSeen(model.getSupportedVersion().getAvailableVersions().get(0)));
if (model.isNewFeaturesSeen());
//request data from here
})
.retry(1);
Observable<List<WhatsNew>> getWhatsNewFeature = contentAPI
.getWhatsNewFeature(model.getSupportedVersion().getAvailableVersions().get(0))
.compose(ReactiveUtils.applySchedulers())
.doOnNext(whatsNewList -> {
Timber.i("doOnNext invoked from supported version observable");
if (!whatsNewList.isEmpty())
model.setWhatsNews(whatsNewList);
})
.retry(1);
Observable-supportedVersionObservable=contentAPI
.GetSupportedVersionContent()
.compose(ReactiveUtils.applySchedulers())
.map(SupportedVersionContentContainer->SupportedVersionContentContainer.getContent().get(0).getMessage())
.doOnNext(支持的版本映射->{
Timber.i(“从支持的可观察版本调用doOnNext”);
对于(Map.Entry:SupportedVersionMap.entrySet())
如果(Build.VERSION.SDK_INT>=entry.getKey())
model.setSupportedVersion(entry.getValue());
model.setCurrentVersionExpiryDate(model.getSupportedVersion().getCurrentVersionExpiryDate());
if(model.getSupportedVersion()!=null)
model.setNewFeaturesSen(SharedReferencesManager.IsNewFeaturesSen(model.getSupportedVersion().getAvailableEversions().get(0));
if(model.isNewFeaturesSeen());
//从这里请求数据
})
.重试(1);
可观察的getWhatsNewFeature=contentAPI
.getWhatsNewFeature(model.getSupportedVersion().GetAvailableEversions().get(0))
.compose(ReactiveUtils.applySchedulers())
.doOnNext(whatsNewList->{
Timber.i(“从支持的可观察版本调用doOnNext”);
如果(!whatsNewList.isEmpty())
model.setWhatsNews(whatsNewList);
})
.重试(1);
您不需要副作用。您可以在操作符中保持模型状态:
@Test
void name() {
ContentApi mock = mock(ContentApi.class);
Observable<Model> modelObservable = mock.getSupportedVersionsContent()
.map(s -> {
// do Mapping
return new Model();
})
.flatMap(model -> mock.getWhatsNewFeature(model)
.map(whatsNews -> {
// Create new model with whatsNews
return new Model();
}), 1);
}
interface ContentApi {
Observable<String> getSupportedVersionsContent();
Observable<List<WhatsNew>> getWhatsNewFeature(Model model);
}
class Model {
}
class WhatsNew {
}
@测试
无效名称(){
ContentApi mock=mock(ContentApi.class);
Observable modelObservable=mock.getSupportedVersionContent()
.map(s->{
//绘制地图
返回新模型();
})
.flatMap(模型->模拟.getWhatsNewFeature(模型)
.map(whatsNews->{
//使用whatsNews创建新模型
返回新模型();
}), 1);
}
接口ContentApi{
可观察的GetSupportedVersionContent();
可观察的getWhatsNewFeature(模型);
}
类模型{
}
新课程{
}
请查看flatMap的详细说明:
你不需要副作用。您可以在操作符中保持模型状态:
@Test
void name() {
ContentApi mock = mock(ContentApi.class);
Observable<Model> modelObservable = mock.getSupportedVersionsContent()
.map(s -> {
// do Mapping
return new Model();
})
.flatMap(model -> mock.getWhatsNewFeature(model)
.map(whatsNews -> {
// Create new model with whatsNews
return new Model();
}), 1);
}
interface ContentApi {
Observable<String> getSupportedVersionsContent();
Observable<List<WhatsNew>> getWhatsNewFeature(Model model);
}
class Model {
}
class WhatsNew {
}
@测试
无效名称(){
ContentApi mock=mock(ContentApi.class);
Observable modelObservable=mock.getSupportedVersionContent()
.map(s->{
//绘制地图
返回新模型();
})
.flatMap(模型->模拟.getWhatsNewFeature(模型)
.map(whatsNews->{
//使用whatsNews创建新模型
返回新模型();
}), 1);
}
接口ContentApi{
可观察的GetSupportedVersionContent();
可观察的getWhatsNewFeature(模型);
}
类模型{
}
新课程{
}
请查看flatMap的详细说明:
您可以使用flatMap:
public Observable<List<WhatsNew>> makeRequest {
return contentAPI
.getSupportedVersionsContent()
.flatMap(supportedVersionsMap -> {
//... model initialization
return contentAPI
.getWhatsNewFeature(model.getSupportedVersion().getAvailableVersions().get(0))
.compose(ReactiveUtils.applySchedulers())
.doOnNext(whatsNewList -> {
Timber.i("doOnNext invoked from supported version observable");
if (!whatsNewList.isEmpty())
model.setWhatsNews(whatsNewList);
})
.retry(1);
});
公共可观察makeRequest{
返回contentAPI
.GetSupportedVersionContent()
.flatMap(支持的版本映射->{
//…模型初始化
返回contentAPI
.getWhatsNewFeature(model.getSupportedVersion().GetAvailableEversions().get(0))
.compose(ReactiveUtils.applySchedulers())
.doOnNext(whatsNewList->{
Timber.i(“从支持的可观察版本调用doOnNext”);
如果(!whatsNewList.isEmpty())
model.setWhatsNews(whatsNewList);
})
.重试(1);
});
您可以使用flatMap:
public Observable<List<WhatsNew>> makeRequest {
return contentAPI
.getSupportedVersionsContent()
.flatMap(supportedVersionsMap -> {
//... model initialization
return contentAPI
.getWhatsNewFeature(model.getSupportedVersion().getAvailableVersions().get(0))
.compose(ReactiveUtils.applySchedulers())
.doOnNext(whatsNewList -> {
Timber.i("doOnNext invoked from supported version observable");
if (!whatsNewList.isEmpty())
model.setWhatsNews(whatsNewList);
})
.retry(1);
});
公共可观察makeRequest{
返回contentAPI
.GetSupportedVersionContent()
.flatMap(支持的版本映射->{
//…模型初始化
返回contentAPI
.getWhatsNewFeature(model.getSupportedVersion().GetAvailableEversions().get(0))
.compose(ReactiveUtils.applySchedulers())
.doOnNext(whatsNewList->{
Timber.i(“从支持的可观察版本调用doOnNext”);
如果(!whatsNewList.isEmpty())
model.setWhatsNews(whatsNewList);
})
.重试(1);
});