2016-05-31 8 views
1

私はHTTPリクエストを持つ別の関数を呼び出すheroes.fromという関数のリストを取得するコンポーネントからのサービスコールを持っています...どうすれば関数呼び出しを購読して、応答を正しく取得できるようになりますか? ..Hereは、これは私が私のコンポーネントangular2サービスコールでobservablesを使用するには?

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

からサービスを呼び出していますそして、私のサービスクラスで私はhttpリクエストを持つ別のメソッドを呼び出し、このメソッドを呼んで加入しているかである私のplunkerデモhttp://plnkr.co/edit/UM9STMwaOsgolhBjADjx?p=preview ... ですそれまで...

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 誰かを示しています私は間違っています。ありがとう

答えて

2

利用.map(...)の代わり.subscribe(...)getHeroes()のように:

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

.subscribe()と、それはあなたがに加入することはできませんSubscription返しながらObservableを返しgetHeroes()この方法でここでのサンプルです。

1

実際には、サブスクリプションを返すので、getHeroesメソッドの中で購読する必要があります。

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

subscribeメソッドは、オブザーバブルでのみ呼び出すことができます。サブスクリプションオブジェクトはサブスクリプションをキャンセルするために使用できます...

実際には、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' }; 
    }); 
} 
関連する問題