2017-09-02 39 views
2

Observableの内部でキャプチャを使用すると、エラーでの戻りの問題をどのように解決できますか?角4 - 観測可能なキャッチエラー

サブスクリプションが実行される前に、いくつかの検証を行うためにcatch内で関数を実行したいと考えています。

ありがとうございました。ありがとうございました。/XXXXXX /アプリケーション/ SRC /アプリで> .catch((E)=> {にconsole.log(E)})

import { Injectable } from '@angular/core'; 
import { Headers, Http, ResponseOptions} from '@angular/http'; 
import { AuthHttp } from 'angular2-jwt'; 

import { MEAT_API } from '../app.api'; 

import { Observable } from 'rxjs/Observable'; 
import 'rxjs/add/operator/map'; 
import 'rxjs/add/operator/catch'; 

@Injectable() 
export class CompareNfeService { 


    constructor(private http: AuthHttp) { } 

    envirArquivos(order): Observable<any> { 
     const headers = new Headers(); 
     return this.http.post(`${MEAT_API}compare/arquivo`, order, 
     new ResponseOptions({headers: headers})) 
     .map(response => response.json()) 
     .catch((e) => {console.log(e)}); 
    } 
} 

エラー

ERROR -

エラーで発生します/compare/service.ts(28,17): タイプ '(e:any)=> void'の引数は タイプ '(err:any、catch:Observable)=> ObservableInput < {}のパラメータに割り当てられません。 > '。
タイプ 'ObservableInput < {}>'に「void」タイプを割り当てることはできません。

答えて

3

以下の行を使用して

return Observable.throw(error || 'Internal Server error'); 

インポートの下throw演算子を使用する必要がありますが、委任前Observable.throw()メソッドを使用する必要がありますメソッドへのエラー応答

を使用して

あなたはを通してエラーを渡したい場合にのみ

3

キャッチは観察可能なものを返す必要があります。

.catch(e => { console.log(e); return Observable.of(e); }) 

あなたがキャッチし、エラーの後にパイプラインを停止したい場合は、この操作を行います。

.catch(e => { console.log(e); return Observable.of(null); }).filter(e => !!e) 

をこのキャッチがNULLのvalにエラーを変換して、フィルタがfalsey値はできませんスルー。しかし、これは間違った値のためにパイプラインを止めるでしょう。そうすればそれらが来るかもしれないと思っていて、それを望むなら、より明示的/創造的である必要があります。

0

あなたがObservablecatch()を使用する場合は、

import 'rxjs/add/observable/throw'; 
+0

私のために働きました。あなたの目標が真にエラーを処理/捕捉することであるならば、あなたは転覆すべきではありません。 – bryan60

+0

@ブライアン60精巧にお願いします! – Aravind

+0

Observable.throw()はエラーをスローし、観測可能なシーケンスの残りの部分がスキップされ、サブスクライバのエラーハンドラにまっすぐ進みます。これは意図的な振る舞いではない場合には、オプションで再スローしてオブザーバブルを返すことはできません。それは実際にあなたのユースケースに依存します。 – bryan60

関連する問題