2017-11-28 10 views
1

RxJSでエラーをキャッチする方法Angular 5と一緒にRXJS 5.5私が使用しています5.5

私はちょうどこの

getProjectInfo(id): Observable<any> { 
    const URL = `${this.API}/${id}`; 
    return this.http.get(URL) 
     .pipe(map(res => res)), 
     catchError(this.handleServerError); 
} 

handleServerError(error: any) { 
    console.log(error.error || error.json() || error); 
    return Observable.throw(error.error || error.json() || error || 'Server error'); 
} 

ような何かを行うことができます。しかし、今、私はこのエラーを取得する前に

Error:(21, 5) TS2322:Type 'UnaryFunction<Observable<{}>, Observable<any>>' is not assignable to type 'Observable<any>'. 
    Property '_isScalar' is missing in type 'UnaryFunction<Observable<{}>, Observable<any>>'. 

私もこの

getProjectInfo(id): Observable<any> { 
    const URL = `${this.API}/${id}`; 
    return this.http.get(URL) 
     .pipe(map(res => res)), 
     catchError(err => this.handleError('getProjInfo', URL)); 
} 
private handleError(method: String, URL: string): any { 
    return (err: any) => { 
    const errMsg = `error in ${method}() retrieving ${URL}`; 
    console.log(`${errMsg}:`, err); 
    if (err instanceof HttpErrorResponse) { 
     console.log(`status: ${err.status}, ${err.statusText}`); 
    } 
    return Observable.throw(errMsg); 
    }; 
} 
を試してみました

私は間違って何をしていますか?

+4

「catchError」とは何ですか?おそらく 'パイプ'の内側にあるはずです。 – martin

+0

'catchError'は.catch''の賃貸可能verisonと.pipe' 'でなければなりません。 – Sawtaytoes

答えて

0

あなたのパイピングが正しくありません。

getProjectInfo(id): Observable<any> { 
    const URL = `${this.API}/${id}`; 
    return this.http.get(URL) 
     .pipe(map(res => res) 
      .catch(err => this.handleError('getProjInfo', URL))); 
} 

マーティンはパイプの内側にあると言いました。

+0

はい、インポートする必要があります。あなたはそれを輸入しただろうと思った。 –

+0

あなた 'catch'は' map'機能のためではなく –

+1

'http.get'ため' catch'にように思えるこの答えが間違ってい –

3

は心の中であなたのブラケットを保管してください。所有する

return this.http.get(URL) 
    .pipe(map(res => res)), 
    catchError(this.handleServerError); 

場所1つのブラケットの場所::あなたはpipe結果とcatchEror結果,で割っを返す

return this.http.get(URL) 
    .pipe(
    map(res => res), 
    catchError(this.handleServerError) 
); 
+0

キャッチとcatchErrorの違いは何ですか? –

+0

catchErrorがパイプの内部RxJS 5.5以降に代えてキャッチを用いることです() – AFD

2

私はあなたが受け入れ答えが正しいとは思いません。

return this.http.get(URL) 
 
    .pipe(
 

 
    map(res => doStuff(res)), 
 

 
    catchError(err => { 
 
     this.handleServerError(err); 
 
     return this.resDummyData; 
 
    }) 
 

 
);

catchError演算子を使用している場合、あなたはその形式のデータで再び観測可能に返却する必要があります:パイプの構文を使用して

、私はそれはとてもようにする必要があります信じていますサブスクリプションは期待しています。実際のHTTPレスポンスデータが欠落しているため、下流のサブスクリプションでは、あなたのロジックが失敗した場合、それ以外の場合は、エラーをキャッチすることは

また、代わりにcatchErrorのあなたが再試行またはretryWhenのような他のrxjs演算子を使用することをお勧めします...あまり助けにはなりませんあなたのユースケースに応じて。

良い記事:Simple Error Handling in RxJS

関連する問題