2016-08-02 4 views
0

У меня есть некоторый код компонента, который выглядит следующим образом:Angular2 - вложенный HTTP просит

private myThing: MyThing; 

ngOnInit() { 
    this.service.getMyThing().subscribe(thing => { 
     this.myThing = thing; 
    } 
} 

Однако служба выглядит следующим образом - он состоит из данных, соединенных двух запросов HTTP. Первый из «otherService», который извлекает дополнительное свойство для объекта thing, а второй вызов выбирает объект основной вещи. Я хотел бы объединить эти результаты и предупредить абонента, когда все действия были завершены, т.е. this.myThing должен иметь «.prop» собственность ...

public getMyThing(): Observable<MyThing> { 
    this.otherService.getThingProperty().subscribe(prop => { 
     return this.http.get('url') 
      .map(res => res.json()) 
      .map(thing => { 
       thing.prop = prop; 
      }); 
    }); 
} 

Но это явно неправильно - функция считает его пустое, что имеет смысл ... Я просто не знаю, как заставить компонент подписаться на окончательный наблюдаемый. Любые советы приветствуются. Благодаря!

ответ

1

Попробуйте switchMap:

public getMyThing(): Observable<MyThing> { 
    return this.otherService.getThingProperty().switchMap(prop => { 
    return this.http.get('url') 
     .map(res => res.json()) 
     .map(thing => { 
      thing.prop = prop; 
     }); 
    }); 
} 
+0

switchmap выглядит именно то, что я искал ... Я понял, что я не хватает кусок моей головоломки - у вас есть какие-либо понять по этому вопросу: HTTP://stackoverflow.com/questions/38712303/angular2-return-observable-of-object-created-in-map-функция – user3689167

+0

'switchMap' FTW !!! – Matt