【问题标题】:Angular material dialogRef.afterClosed().subscribe not handle error角材料 dialogRef.afterClosed().subscribe 不处理错误
【发布时间】:2020-02-13 03:59:53
【问题描述】:

如果单击确认按钮,我正在使用 Angular Material 模态调用 Web 服务它的工作问题是,如果 Web 服务返回错误,我无法得到错误

dialogRef.afterClosed().subscribe(result => {

// calling the ws 
 this.reqService.onRequestSave(this.request).subscribe(data =>{

    // do some work
  },err=>{
      // never displayed
      alert(err)
   }
)

},error=>{
     // never displayed
     alert(error)
} 
);

// 休息客户端

 onRequestSave(request : RequestDto){
        console.log(JSON.stringify(request))
        return this.http.post<RequestResponseDto>(this.apiUrl + "/request",JSON.stringify(request),this.utils.getHeaders());
    }

我想显示第一个警报,知道如何解决这个问题,感谢您的帮助

【问题讨论】:

  • 显示您的 onRequestSave 代码
  • @HsuanLee 服务已添加
  • 你的应用有 HTTP 拦截器吗?
  • 是的,我有一个拦截器
  • 感谢@HsuanLee 问题是我的拦截器没有处理状态为 400 的错误只有 500

标签: javascript angular angular-material observable angular8


【解决方案1】:

你为什么要在父组件中调用服务。而不是点击确认按钮,你可以有一个调用服务的方法,如果调用成功完成,关闭对话框,如果有错误,显示错误。

可能是这样的。

在对话框组件中:-

onConfirmation(){
  this.reqService.onRequestSave(this.request).subscribe(
    data  => { this.dialog.close(data); },
    error => { alert(error); }
}

在父组件中:-

dialog.afterClosed().subscribe(result => {
  this._snackbar.open("Request successfully saved.");
});

【讨论】:

    【解决方案2】:

    如果您尝试用 try/catch 包围该代码会怎样?这应该适用于您的“处理”代码引发错误的错误:

    dialogRef.afterClosed().subscribe(result => {
      // calling the ws 
      this.reqService.onRequestSave(this.request).subscribe(data =>{
        try {
          // processing 'data'
        } catch (err) {
          // displayed, if the processing code
          alert(err);
        }
      }, err=>{
        // displayed, if the Observable produces an error
        alert(err);
      });
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-10
      • 2018-06-15
      • 1970-01-01
      • 2015-10-09
      • 2021-10-09
      • 1970-01-01
      相关资源
      最近更新 更多