RxJs – 当有可变数量的请求时,如何实现并行HTTP请求

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

其中一个开发的API端点是/api/v1/users/:userId ,它返回用户的全部信息,用户信息以及他所属部门的详细信息。

为了得到这个信息,有这个后端REST服务:

/users/:userId – 返回带有用户信息和部门ID列表的JSON对象,例如:

 { "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并对/departments/deparmentId进行n次调用
  3. 完成所有调用后,编写完整的JSON响应并将其返回。

我想使用RxJs将请求alignment,所以我想用Rx.Observable.zip()就足够了。

重点是,如果我有一个Observable数组,它的大小不固定,表示每个HTTP请求调用,我怎样才能调用Observable.zip()

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

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

但是我不知道有多less可观测量,所以我怎样才能调用zip()?

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

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

另一种方法是使用可以接收observables作为数组的 forkJoin

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