2017-11-21 10 views
3

유닉스 환경에서 코드를 실행할 때 매우 귀찮은 오류가 발생합니다. 내가 ng serve을 통해 로컬 코드를 실행할 때이 잘 작동하지만 내 서버에 코드를 배포 할 때이 오류가 모든 프로그램 실행을 중단 :Observable .catch가 함수가 아닙니다.

ERROR TypeError: this.http.get(...).catch is not a function

내가 rxjs을 가져와야합니다

Google 결과 상태 이름 공간은 rxjs/Rx 번들을 통하지 않고 그들의 위치에서 곧바로 나옵니다. 그러나이 오류는 무시됩니다. 다른 결과는 rxjs 연산자를 가져 오지 못했을 수도 있지만 필자의 경우에는 분명히 포함되어 있습니다.

DevTools를 사용하여 포함 된 소스 맵을 검사하기도하고 연산자가 브라우저에 포함됩니다.

아무도 왜이 오류가 발생하는지 말해 줄 수 있습니까? rxjs를 사용하고 있습니다.^5.5.2

이것은 내 코드입니다. ,

this.myService.all().subscribe(
    result => { 
    this.isLoading = false; 
    if (result) { 
     this.clients = result; 
    } 
    }, 
    error => this.isLoading = false 
); 

이 같은 구독 두 콜백 함수를 일으켜과 동일 : @ 아래 Jota.Toledo의 의견을 바탕으로

import { Injectable } from '@angular/core'; 
import { HttpClient } from '@angular/common/http'; 
import { Observable } from 'rxjs/Observable'; 
import 'rxjs/add/operator/catch'; 
import 'rxjs/add/observable/throw'; 

@Injectable() 
export class MyService { 
    constructor(private http: HttpClient) {} 

    all(): Observable<any> { 
    return this.http.get<any>('url') 
     .catch(err => this.handleError(err)); 
    } 
    handleError(error) { 
    return Observable.throw(error); 
    } 
} 

편집 , 나는이 방법을 사용하여 코드를 제공합니다 "연산자가 추가되기 전에 어딘가에 catch 메서드를 사용합니까?"

+0

어떤 rxjs 버전을 사용하고 있습니까? – Aravind

+0

질문 편집 @Aravind –

+0

이 코드 조각에서 문제가 발생했는지 확인 하시겠습니까? 연산자를 가져 오기 전에 괜찮습니다. 연산자를 추가하기 전에 어딘가에 catch 메서드를 사용하고 있습니다. –

답변

4

rxjs 5.5.2에서 lettable 연산자 (이 경우 catchError)를 사용하여이 문제를 해결할 수 있습니다. operators에서 가져 오려면 import { catchError } from 'rxjs/operators/catchError';과 같이 입력해야합니다. 일반적으로 모든 연산자는이 방법으로 가져와야하며 observableobservable/of과 같습니다.

import { catchError } from 'rxjs/operators/catchError'; 
import { map } from 'rxjs/operators/map'; 

all(): Observable<any> { 
    return this.http.get<any>('url') 
    .pipe(
     map(() => //do stuff), 
     catchError((error: Error) => { 
     // 
     }) 
    ) 
} 

는 lettable 사업자 here에 대해 자세히 알아보십시오.

+2

귀하의 이해가 부분적으로 잘못되었습니다. 실제로 catchError라고하는 catch 연산자의 lettable 버전이 있지만 원본은 여전히 ​​존재합니다. 링크 된 동일한 블로그에는 문제없이 이전 패치 방식을 사용하는 예제가 있으며 OP 구현과 일치합니다. 그래서 리팩토링 오퍼레이션은 새로운 파이프 메소드를 사용하기 위해 접근합니다. 실제로 그의 질문에 대답하지 않습니다. –

+0

당신 말이 맞아요. lettable 연산자로 해결할 수있는 방법을 제안했습니다. – AndreaM16