如何手动抛出可观察到的错误?

新手上路,请多包涵

我正在开发一个 Angular 应用程序,在该应用程序中我通过 HTTP 进行休息调用,如下所示:

 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 总是返回成功,因为它是这样定义的。

如果 response.success == 0 ,如何抛出错误消息,以便在订阅回调的错误参数中访问它?

原文由 Bhushan Gadekar 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 454
2 个回答
if (response.success == 0) {
   throw Observable.throw(response);
 }

编辑 rxjs 6

 if (response.success == 0) {
   throw throwError(response);
 }

原文由 Jorawar Singh 发布,翻译遵循 CC BY-SA 4.0 许可协议

您可以在管道内使用 catchError(error) => console.log(error)

原文由 Franco 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题