2016-11-09 8 views
10

以下のように私は私がHTTP経由で、残りのコールを作っていたにangular2アプリに取り組んでいます:基本的に私は私のコンポーネントが私の購読呼び出しに応答&エラーを取得したいangular2で観測可能なエラーを手動でスローする方法は?

login(email, password) { 
    let headers = new Headers(); 
    headers.append('Content-Type', 'application/x-www-form-urlencoded'); 
    let options = new RequestOptions({ headers: headers }); 
    let body = `identity=${email}&password=${password}`; 
    return this.http.post(`${this._configService.getBaseUrl()}/login`, body, options) 
    .map((res: any) => { 
     let response: any = JSON.parse(res._body); 
     if (response.success == 0) { 
      Observable.throw(response); // not working 
     } else if (response.success == 1) { 
      console.log('success'); 
      localStorage.setItem('auth_token', 'authenticated'); 
      this.loggedIn = true; 
      return response; 
     } 
    }); 
} 

すなわち

this._authenticateService.login(this.loginObj['identity'],this.loginObj['password']).subscribe(
    (success)=>{  
    this.credentialsError=null; 
    this.loginObj={}; 
    this._router.navigate(['dashboard']);  
    }, 
    (error)=>{ 
    console.log(error);   
    this.credentialsError=error;  
    } 
); 

それidはそのように定義されているように私APIは常に成功を返します。

response.success == 0の場合はエラーメッセージをスローすることができるので、subscribeコールバックのエラー引数の中でアクセスすることができます。

+0

次第です、私はそれがその後、他の0することができ意味ですか? –

+0

@MrJSingh APIを設計した人は、レスポンスを検証するために0または1として成功を返しました。私の操作は成功しました。成功= 1を返すか、成功= 0を返します。それは可能ですか? –

+0

私のアプリで試してみると、技術的に可能でなければなりません。 –

答えて

28
if (response.success == 0) { 
    throw Observable.throw(response); 
} 
+0

での関数 ではありません。 –

+1

を使用していない後に私は理解していない私は成功コールバックでそれを取得していますCatchSubscriber.selector –

+0

私の応答が何かを返す場合、それはエラーか成功かどうかを常に成功コールバックに返します。エラーコールバックで.. –

0

キャッチオペレータ

this.calcSub = this.http.post(this.constants.userUrl + "UpdateCalculation", body, { headers: headers }) 
    .map((response: Response) => { 
     var result = <DataResponseObject>response.json(); 
     return result; 
    }) 
    .catch(this.handleError) 
    .subscribe(
     dro => this.dro = dro, 
    () => this.completeAddCalculation() 
    ); 

を使用して、このようなエラー対処:

private handleError(error: Response) { 
    console.error(error); // log to console instead 
    return Observable.throw(error.json().error || 'Server Error'); 
} 
+0

my apiはcatchブロックを呼び出すことはありません。それは私が持っている問題です。私の応答では、特定の状態をチェックしてから、エラーを投げたり、catchブロックを呼び出す必要があります。 __ __WEBPACK_IMPORTED_MODULE_2_rxjs_Observable a.throwもこの –

+0

は、私はプライベートhandleErrorの(レスポンスエラー)でこのエラーを得ています。 、それを使用していないときはどういう意味ですか?あなたは私にそれを説明できますか?私はあなたがケースを持っているとしてそれをテストし、Observableは成功が0の場合にのみエラーをスローします。 –

3

throw response; 

または

のいずれかをあなたが使用することができます
return Observable.throw(response); // not working 
+0

を処理しました: 'throw Observable.throw(response)' –

0

:あなたはErrorObservableで返す何

import { ErrorObservable } from 'rxjs/observable/ErrorObservable'; 

if (response.success == 0) { 
    return new ErrorObservable(response); 
} 

はあなたが取得しているステータスコードで何

関連する問題