我正在开发一个带有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
的调用需要调用
GET /user/1
->{ "name" : "user1" , "departments" : [1, ,5 ,7 ,8]}
- 获取部门 ID 并拨打 n 个电话
/departments/deparmentId
- 完成所有调用后,编写完整的 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(...);