如何使用 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> ...)