Search code examples
angularobservableangular2-observables

When using Observable.merge HTTP requests are never getting called


I'm trying to loop the http requests using merge operator.

Service:

addData(data) {
    return this.http
        .post(this.url, data)
        .map(resp => {
            return resp;
        });
}

Component:

    addData(data) {
    if (data.length != 0) {
        let respObs: Observable<Response>[] = [];
        data.forEach(element => {
            respObs.push(this.addService.addData(element));
        });
        Observable.merge(respObs)
            .subscribe(resp => {
                console.log(resp); // Observable object not the Response object is getting logged.
            }, err => {
                console.log(err);
            });
    }
}

Versions Used:

Angular: 4.3.5
RxJS: 5.1.0

When the network console is checked I see the http calls were never made and the Observable objects are logged instead of the responses from the http calls.


Solution

  • For Rxjs 5, you need to pass the Observables as a comma separated list. Try this:

    Observable.merge(...respObs)
      .subscribe(resp => {
        console.log(resp); // Observable object not the Response object is getting logged.
      }, err => {
        console.log(err);
      });