如何在angular2服务调用中使用observables?

如何在angular2服务调用中使用observables?

问题描述:

我有一个来自我的组件的服务调用,该组件获取了heroes.from该函数的名称,它调用了具有http请求的另一个函数...我如何订阅函数调用,以便我将得到正确的响应。 ..Here是我plunker演示http://plnkr.co/edit/UM9STMwaOsgolhBjADjx?p=preview ... 这就是我如何调用从我的组件如何在angular2服务调用中使用observables?

ngOnInit() { 
       this.heroService.getHeroes() 
       .subscribe(
        heroes => this.heroes = heroes, 
        error => this.errorMessage = <any>error); 
} 

而在我的服务一流的服务,我称这种方法,它调用具有HTTP请求和签署的另一种方法到...

getHeroes(){ 
return this.GetListOfHeroes() 
     .subscribe((data: any) => { 
      return data; 
     } 
     ); 
} 

最后,这个我S的获取列表的方法...

GetListOfHeroes(){ 
    return this.http.get(this.heroesUrl) 
       .map(this.extractData) 
       .catch(this.handleError); 
} 

如果我直接打电话从我的组件GetListOfHeroes()方法,它工作正常,但如果我试图调用,从另一种方法它表明这个错误this.heroService.getHeroes(...).subscribe is not a function 有人请告诉我在哪里做错了......谢谢

使用.map(...)而不是.subscribe(...)getHeroes(),如:

getHeroes(){ 
    return this.GetListOfHeroes() 
    .map((data: any) => { 
     return data; 
    }); 
    } 

这样,当与.subscribe()它返回一个Subscription你不能订阅getHeroes()返回Observable

事实上,你应该在getHeroes方法中订阅,因为它会返回订阅而不是可观察的。

getHeroes(){ 
    return this.GetListOfHeroes() 
    .subscribe((data: any) => { // <----- 
     return data; 
    }); 
} 

subscribe方法只能在observable上调用。订阅对象可用于取消订阅...

实际上,这取决于您想要在getHeroes方法中执行的操作。例如,您可以利用do运营商或map。下面是一个示例:

getHeroes(){ 
    return this.GetListOfHeroes() 
    .do((data: any) => { // <----- 
     // do something with data 
    }) 
    .map((data: any) => { 
     // return something else in the data flow 
     return { attr: 'value' }; 
    }); 
}