2017-11-30 8 views
0

나는 다음과 같은 기능이 있습니다성공적인 HTTP 후 무언가를

public getList(): Observable<T[]> { 
    let url = this.baseUrl + this.type + 'list'; 
    return this.http.get<any>(url, {headers: this.headers }) 
     .retry(3) 
     .map(response => response.list as T[], 
      (error: HttpErrorResponse) => { 
      this.toastrService.error('everything is broken', 'Major Error', { 
       timeOut: 3000, 
      }); 
      console.log(error.name); 
      }); 
} 

가 나는 또한 성공적인 Webservice를 호출 후에 toasterService.success()와 토스터를 추가 할,하지만 난 .map(response => response.list as T[] 후이를 추가하는 방법을 알아낼 수 없습니다를 . 어떻게해야합니까?

답변

3

이 방법을 구독해야합니다. Observables를 사용하고 있다는 것을 기억하십시오. 그러므로 관찰자가 필요합니다.

당신은 같은 것을 할 수 있습니다

public getList(): Observable<T[]> { 
    let url = this.baseUrl + this.type + 'list'; 
    return this.http.get<any>(url, {headers: this.headers }) 
     .retry(3) 
     .map(response => response.list as T[]) 
} 

this.getList().subscribe((response)=>{ 
    //Handle your success here 
}, 
(error)=>{ 
    //Handle Your Error here 
}); 

경우에만 특정 형식으로 응답을 변환하는지도 기능을 사용한다는 것을 기억하십시오. 면밀히 살펴보면 해당 회선 시작 부분에 이미 응답을 반환하고있는 것입니다.

GET 요청의 성공 또는 오류에 대해 실행해야하는 모든 코드는 위에서 언급 한 것처럼 구독자에서 처리해야합니다.

getList() 메소드가 데이터를 반환하여 작업을 완료했습니다. 이제는 그것을 처리하는 것이 가입자의 임무입니다.

getList 메서드가 서비스에 있으면이 서비스를 구성 요소 데코레이터에 제공하여 구성 요소의 생성자에 서비스를 주입해야합니다.

그리고 대신 this.getList().subscribe()을하고, 당신은 당신의 도움에 대한 this.yourServiceInstance.getList().subscribe()

+0

감사 할 수 있습니다. '.subscribe()'다음에 블록에서 succes를 처리 할 수 ​​있다는 것을 알고 있지만,'subscribe()'를 호출 할 때마다 토스트 메시지를 구현해야합니다. 'this.' 때문에'this.getList(). subscribe (.....) '항목을 어디에 둘 것인지 이해할 수 없습니다. 그것은 내 봉사에 있어야하는 것이 아니라 그 때 어디에 있어야합니까? 고맙습니다. –

+0

구독자가 구성 요소에 있어야합니다. 구성 요소 생성자에 toasterService를 주입해야합니다. 구성 요소에 서비스를 주입하는 방법에 대한이 기사를 읽으십시오. https://blog.thoughtram.io/angular/2015/09/17/resolve-service-dependencies-in-angular-2.html –

+0

그리고 두 번 이상 구독 할 필요가 없습니다. GET에서 사용할 수있는 새 데이터가있을 때마다 성공 처리기가 실행됩니다. 그러므로 "구독"이라는 단어. 서비스의 데이터 변경 사항을 구독하고 있습니다. –