【问题标题】:Angular2 making multiple requests using rxjs subscribeAngular2使用rxjs订阅发出多个请求
【发布时间】:2017-03-21 06:52:21
【问题描述】:

我有一个 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());
    }

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

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

有没有办法使用 rxjs 来消费 api 的结果而无需像上面那样多次订阅,或者这是检索数据的唯一方法?

【问题讨论】:

  • 所以您只想在所有this._accountsService.removeFromClientLibrary 调用完成后收到通知?

标签: angular typescript rxjs observable


【解决方案1】:

您可以使用combineLatest operator

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

【讨论】:

    猜你喜欢
    • 2020-11-06
    • 2016-08-06
    • 2018-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多