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
需要调用
-
GET /user/1
– >{ "name" : "user1" , "departments" : [1, ,5 ,7 ,8]}
- 获取部门ID并对
/departments/deparmentId
进行n次调用 - 完成所有调用后,编写完整的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(...);