角材质对话框Ref.afterClosed()。订阅无法处理错误

时间:2019-10-16 11:24:18

标签: javascript angular angular-material observable angular8

如果使用确认按钮单击,我正在使用角度材料模态来调用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());
    }

我想向第一个警报显示任何解决方法,谢谢您的帮助

2 个答案:

答案 0 :(得分: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.");
});

答案 1 :(得分:0)

如果您尝试用 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);
  });
});