如何使用 zip 运算符从 endpoints/APIs 列表中获取网络响应?
How to get network responses from a list of endpoints/APIs using zip operator?
我想通过 endpoints/APIs(不是特定数字)的列表进行网络请求,然后 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>>() {
...
}
有什么想法吗?
function you mention正是你所需要的,它不需要预先API的数量。您确实想使用可观察对象来延迟 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> ...)
我想通过 endpoints/APIs(不是特定数字)的列表进行网络请求,然后 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>>() {
...
}
有什么想法吗?
function you mention正是你所需要的,它不需要预先API的数量。您确实想使用可观察对象来延迟 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> ...)