2016-04-28 19 views
1
にサブスクライブする

httpインターセプタに正しい方法でサブスクライブすることに問題があります。私は以下を持っています:エラーを傍受して

post(url: string, body: any, options?: RequestOptionsArgs): Observable<Response>{ 
    return super.post(url,body, {headers: customHeaders}).catch(err =>{ 
      console.log('Error caught in POST at '+url); 
      return Observable.of(err); 
     }); 
    } 

これはうまくいきます - 投稿中にエラーが発生するたびにログを記録します。しかし、私はこのような他のコンポーネントでエラーをキャッチしようとした場合:

this.http.post('someurl','somestring') 
    .subscribe(
     success=>{ 
      console.log('success: ',success); 
     }, 
     error=>{ 
      console.log('error: ',error); 
     } 
    ) 

をだから今、POST中にエラーが私のコンソールログのプリントがある場合:しかし

Error caught in POST at someurl 
success: //errorobject here// 

、私はこれを期待していたが。

Error caught in POST at someurl 
error: //errorobject here// 

私は間違っていますか?それが成功によって処理されるように

post(url: string, body: any, options?: RequestOptionsArgs): Observable<Response>{ 
    return super.post(url,body, {headers: customHeaders}).catch(err =>{ 
     console.log('Error caught in POST at '+url); 
     return Observable.throw(err); // <-------------- 
    }); 
} 

Observable.ofは、観察可能な「成功」を返します。

答えて

1

私はObservable.ofの代わりにObservable.throwを使用することになり、それがthrow err代わりのObservable.of(err)

post(url: string, body: any, options?: RequestOptionsArgs): Observable<Response>{ 
    return super.post(url,body, {headers: customHeaders}).catch(err =>{ 
      console.log('Error caught in POST at '+url); 
      throw err; 
     }); 
    } 
1

されるべきだと思いますsubscribeのコールバック。

+0

ティエリー、私はあなたのために1つ行ったhttp://stackoverflow.com/questions/37049848/http-stream-send-twice-instead-of-once :) – uksz

関連する問題