我有一个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的结果而不需要多次订阅,或者这是检索数据的唯一方法?
答案 0 :(得分:1)
您可以使用combineLatest
operator。
Observable.combineLatest(
selected.map(selectedId =>
this._accountsService.removeFromClientLibrary(this.username, selected[i].RoleID)))
)
.subscribe((statusArray) => console.log('all done: ', statusArray));