java - 并行运行两个单打并处理场景

标签 java android reactive-programming rx-java2

我有两个 Singles(getChannels 和 getEPGs),两者并行运行。在大多数情况下,getChannels 在 getEPGs 之前完成,我可以将 EPG 连接到 channel 。但是,我想处理 getEPG 在 getChannels 之前完成的情况。

换句话说,

  1. 两个 Singles 并行运行。
  2. 要连接 EPG,必须已加载 channel 。
  3. 如果 getEPGs 在 getChannels 之前完成,则必须等待 getChannels,然后才会调用方法
  4. 如果 getEPG 失败,应用流程无论如何都会继续。

如何在不依赖回调和 while 循环的情况下完成此任务?我想应该有一种 react 性的方式来处理这种情况。提前致谢。

@GET
Single<ResponseBody> getChannels(@Url String url);

@Streaming
@GET
Single<ResponseBody> getEPGs(@Url String url);


getChannels [.............................]

getEPGs     [..........................................]

最佳答案

将您的函数定义到存储库中并通过 viewModel 访问它们。

public class Repository {
    @GET
    return Single<ResponseBody> getChannels(@Url String url);

    @Streaming
    @GET
    return Single<ResponseBody> getEPGs(@Url String url);
}

现在是 ViewModel 类。

public class SiteListViewModel extends BaseViewModel {

private CompositeDisposable mDisposable;
private Repository mRepository;

  public void getData() {
      mDisposable.add(
          mRepository.getChannels().subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(obj -> {"CALL SECOND FUNCTION OVER HERE"

                },throwable -> Log.e("Error", e.printStackTrace()))
        );
    }
}

关于java - 并行运行两个单打并处理场景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60488231/

相关文章:

java - 如何将 MouseListener 添加到框架

java - 具有增强 for 循环的 ClassCastException

android - Gradle Javadoc 失败并显示 "error: package ... does not exist"

java - 从TextureView中提取要保存的视频文件

C# Reactive Extensions - 我应该退回一次性的吗?

java - 如果添加现有数据,Java 中的 HashMap 内存使用情况是什么

java - 是否有以微代码运行 Java 的 CPU?

reactive-programming - 将可观察序列转换为仅从最近的可观察序列产生值的可观察序列

android - 从 Firebase 数据库读取数据

reactive-programming - 流 |处理器和线程模型