2016-07-15 3 views
1

У меня проблема с Observables в приложении Angluar2. Предположим гипотетическую ситуацию, что мне нужно сделать два отдельных HTTP-вызова. Один вызов напрямую зависит от результата другого. Код выглядит так:Два синхронных http-вызова с использованием Observable

this.http.get('http://kalafior/group/'+id) 
    .map(res => res.json()) 
    .subscribe(group => { 
     //url depends on previous call result 
     this.http.get('http://kalafior/group/'+group.id+'/posts') 
      .map(res => res.json()) 
      .subscribe((res) => { 
       console.log(res); 
      }); 
    }); 

Есть вложенные вызовы subscribe(), от которых я хочу избавиться.

+0

Тот же тип вопроса, вы можете проверить его здесь, чтобы получить лучшее понимание http://stackoverflow.com/questions/35268482/chaining-rxjs-observables-from-http-data-in-angular2-with -typescript? RQ = 1 –

ответ

3

flatMap был создан именно для такого рода сценариев.

this.http.get('http://kalafior/group/'+id) 
    .map(res => res.json()) 
    .flatMap(group => this.http.get('http://kalafior/group/'+group.id+'/posts')) 
    .map(res => res.json()) 
    .subscribe((res) => { 
     console.log(res); 
    }); 
}); 
-1

Что вы можете сделать, это использовать функцию .do() от Rxjs. Взгляните here

Смежные вопросы