我想从端点/ API列表(不是特定的号码)做网络请求,然后zip
将响应放入单个数据点。
我知道zip
运算符的FuncN
为combineFunction
,但我不想执行以下操作,因为我不知道列表中有多少API:
List<API> apis = ...;
Observable.zip(apis.get(0).search("a"), apis.get(1).search("b"), new Func2<Item, Item, List<Item>>() {
...
}
有什么想法吗?
答案 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> ...)