2016-05-31 2 views
1

HTTP 요청을 가진 다른 함수를 호출하는 heroes.from 함수 목록을 가져 오는 구성 요소에서 서비스 호출이 있습니다 ... 어떻게 함수 호출을 구독하여 제대로 응답을받을 수 있습니까? ..Here 이것은 내가이 HTTP 요청을 가지고 있으며, 등록 된 다른 방법을 호출이 방법이라고 한 내 구성 요소angular2 서비스 호출에서 observables를 사용하는 방법은 무엇입니까?

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

에서 그리고 내 서비스 클래스에서 서비스를 호출하고 어떻게 내 plunker 데모 http://plnkr.co/edit/UM9STMwaOsgolhBjADjx?p=preview ... 입니다 그것에 ...

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

그리고 마침내이 i 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' }; 
    }); 
} 
관련 문제