RxJs - 当您要发出的请求数量可变时,如何实现并行 HTTP 请求



我正在开发一个带有Express的Node.js API,使用node-rest-client模块发出http请求。

要开发的 API 端点之一是返回用户的完整信息、用户信息以及有关其所属部门的详细信息的/api/v1/users/:userId

要获取信息,可以使用以下后端 REST 服务:

/users/:userId- 返回一个 JSON 对象,其中包含用户信息和部门 ID 列表,例如:

{ "name" : "xxx",
"departments" : [1, 5 ,6, 8]
}

/departments/:departmentId- 包含部门信息的 JSON 对象

{ 
"id" : x,
"name" : "xxx"
}

/api/v1/users/1的调用需要调用

  1. GET /user/1->{ "name" : "user1" , "departments" : [1, ,5 ,7 ,8]}
  2. 获取部门 ID 并拨打 n 个电话/departments/deparmentId
  3. 完成所有调用后,编写完整的 JSON 响应并将其返回。

我想使用 RxJs 对请求进行平行化,所以我想使用Rx.Observable.zip()就足够了。

关键是,如果我有一个大小不固定的可观察数组,代表每个 HTTP 请求调用,我如何调用Observable.zip()

如果数组中固定的元素数量,我会这样做:

var observables = [ obs1, obs2 ];
Rx.Observable.zip( observables[0], observable[1], function(...){...});

但是我不知道有多少可观察量,那么我怎么能调用zip((呢?

您可以使用es6 中的...运算符,

var observables = [obs1, obs2, obs3, ...,  obsx];
Rx.Observable.zip(...observables, function() {});

另一种方法是使用可以接收数组形式的可观察量的forkJoin

Rx.Observable.forkJoin([obs1, ..., obsN]).subscribe(...);

最新更新