2016-11-09 65 views
10

我的工作angular2的應用程序中,我想提出通過HTTP REST調用如下:如何在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;  
    } 
); 

但我的API總是返回它的ID定義的方式成功。

因此,我想知道如果response.success == 0,我怎麼能拋出錯誤消息,以便它將被訪問我的訂閱回調的錯誤參數。

+0

是什麼身份代碼你得到,我的意思是它可以是其他然後0? –

+0

@MrJSingh設計API的人只會返回成功0或1來驗證response.so我的操作是成功的,它會返回success = 1或者它會返回success = 0。現在我想拋出錯誤,如果成功是可能的嗎? –

+0

讓我試試我的應用程序,從技術上講它應該是可能的。 –

回答

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

我甚至沒有使用此 –

+1

我不明白後得到它的成功回調,即使不使用它,你的意思是什麼?你能解釋給我嗎?我測試了它,因爲你有這種情況,只有當成功爲0時,Observable纔會拋出錯誤。 –

+0

我的意思是,如果我的響應返回任何東西,無論是錯誤還是成功,它總是會返回成功callback。我想要拋出錯誤在錯誤回調.. –

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

我的API不會調用catch塊。那是我遇到的問題。在我的迴應中,我想檢查某個條件,然後拋出錯誤或調用catch塊。 –

+0

我已經得到這個錯誤有私人的HandleError(錯誤:響應)。 __WEBPACK_IMPORTED_MODULE_2_rxjs_Observable __ a.throw不是一個函數 在CatchSubscriber.selector –

3

要麼

throw response; 

return Observable.throw(response); // not working 
+0

第二個它將是: '拋出Observable.throw(響應)' –

0

您可以使用:

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

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

ErrorObservable什麼樣的回報是你