2016-11-07 8 views
3

複数の選択ボックスからアイテムを追加または削除し、各アイテムを個別にリモートAPIに送信してデータベースで処理するために追加するangle2アプリケーションがあります。以下の方法が観察Angular2はrxjsを使用して複数のリクエストを作成します

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

このように、 '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)); 
関連する問題