Angular2使用rxjs订阅多个请求订阅

时间:2016-11-07 19:53:58

标签: angular typescript rxjs observable

我有一个angular2应用程序,可以从多个选择框中添加或删除项目,并将每个项目单独发送到远程api,以便添加到数据库中进行处理。以下方法将请求发送到服务器并获取响应作为可观察的

removeFromClientLibrary(username: string, roleID: string): Observable<any> {
        let body = JSON.stringify({Key: username, Value: roleID});

        return this._http.post(this._removeFromLibraryURL, body, this.emsConfig.getStandardHttpHeaders())
            .map((res:Response) => <any>res.json());
    }

然后我添加了一个客户端来使用它,使用subscribe方法来使用它。我的理解是,只需要拨打一次订阅,但是,我似乎无法让它工作。返回正确结果的唯一方法是循环遍历每个项目并多次订阅:

for (let i = 0; i < selected.length; i++) {
  this._accountsService.removeFromClientLibrary(this.username, selected[i].RoleID)
    .subscribe(status => {          
      console.log(status);
    });
}

有没有办法使用rxjs使用api的结果而不需要多次订阅,或者这是检索数据的唯一方法?

1 个答案:

答案 0 :(得分:1)

您可以使用combineLatest operator

Observable.combineLatest(
  selected.map(selectedId =>
    this._accountsService.removeFromClientLibrary(this.username, selected[i].RoleID)))
)
  .subscribe((statusArray) => console.log('all done: ', statusArray));