2016-11-07 5 views
3

У меня есть приложение angular2, которое добавляет или удаляет элементы из многократного окна выбора и отправляет каждый элемент в удаленный api отдельно для добавления для обработки в базе данных. Следующий метод отправляет запрос на сервер и получает ответ в виде наблюдаемойAngular2 делает несколько запросов, используя rxjs subscribe

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 без подписки несколько раз, как описано выше, или в том, что только способ получить данные?

+0

Таким образом, вы хотите получать уведомление только после завершения всех вызовов 'this._accountsService.removeFromClientLibrary'? – martin

ответ

0

Вы можете использовать combineLatest operator.

Observable.combineLatest(
    selected.map(selectedId => 
    this._accountsService.removeFromClientLibrary(this.username, selected[i].RoleID))) 
) 
    .subscribe((statusArray) => console.log('all done: ', statusArray)); 
Смежные вопросы