响应式扩展是否仅适用于 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 等)中有所不同
我有一个代理调用多个 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 等)中有所不同