如何使用zip运算符从端点/ API列表中获取网络响应?

时间:2015-11-19 01:24:28

标签: network-programming reactive-programming rx-java observable

我想从端点/ API列表(不是特定的号码)做网络请求,然后zip将响应放入单个数据点。

我知道zip运算符的FuncNcombineFunction,但我不想执行以下操作,因为我不知道列表中有多少API:

List<API> apis = ...;
Observable.zip(apis.get(0).search("a"), apis.get(1).search("b"), new Func2<Item, Item, List<Item>>() {
...
}

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

function you mention正是您所需要的,它不需要预先提供API的数量。您确实希望使用observable来延迟API上的search

List<API> apis = ...;
Observable<API> apisObs = Observable.from(apis);
List<String> args = ... // list of "a", "b" ordered like the apis' list
Observable<String> argsObs = Observable.from(args);

压缩延迟的API调用(延迟Observable.just):

Observable<ResultType> results = apisObs.zipWith(
    args, (api, arg) -> Observable.just(api.search(arg))
);

现在再次压缩以等待所有已创建的延迟呼叫完成:

Observable.zip(results, new FuncN<ResultType> ...)