响应式扩展是否仅适用于 API 对 return 集合的调用?

Are reactive extensions suitable only for API calls that return collection?

我有一个代理调用多个 REST API 来为 UI 创建一个课程粒度输出。 UI 是用 KnockoutJS 构建的。我正在使用任务/异步方法异步调用 API。只有 1 或 2 个 API return 列表,所有其他 return 平面值对象。 Rx 可以用于组合那些不 return 集合的 API 的结果吗?由于输出不是一个集合,这意味着它不是一个事件流,所以将这样的 api 调用与 Rx 结合起来是否违反 Rx 指南?

Since the output is not a collection it means it is not an event stream so does combining such api calls with Rx be against the Rx guidelines?

将 API 呼叫视为只有一个事件的流。此事件可以是 List,也可以只是 Object

Can Rx be used for combining the results of those APIs that do not return a collection?

是的! Reactive Extensions 是用于异步调用的 API。您的 API returns 是一个集合、一个对象还是什么都没有关系。

示例:

  interface YourRemoteApi {
         Observable<List<String>> users();
         Observable<User> userData(String id);
         Observable<Void> deleteUser(String id);
  }


  class Main {

          public static void main(String...args) {

               YourRemoteApi api = ...
               api.users()
                  // transform an Observable<List<String>> to Observable<String>
                  .flatMapIterable(ids -> ids)
                  // call in a async fashion api.userData()
                  .contatMap(id -> api.userData(id))
                  .filter(data -> data.toDelete())
                  // call in a async fashion api.deleteUser
                  .flatMap(data -> api.deleteUser(data.id))
                  .subscribe();
          }

  }

PS :这个例子使用 RxJava。它可能在另一个语言端口(例如 .NET 的 Reactive Extensions 等)中有所不同