首页 > 解决方案 > 如何从订阅的错误回调中获取标头?

问题描述

我想在用户创建发布响应后处理来自服务器的任何错误响应。该帖子是在 UserService createUser() 方法中创建的。该catch方法会捕获任何错误,然后引发新错误。我已经读到这是必要的,否则订阅方法中的成功回调将被激活,无论是否出现错误。

我使用 Visual Studio 代码作为该项目的 IDE,当您在.变量后输入运算符时,它会给出可以在该变量上调用的任何方法的列表。成功回调变量具有所有预期的方法,包括标头。错误回调只有 html。所以我的问题是:我如何让标题摆脱错误?我需要访问标题,因为我的自定义标题消息是在标题中发送的。这需要在位于组件控制器内的订阅方法中完成,因为当我处理服务中的错误时,我无法弹出错误消息。这是我的代码:

组件控制器端的代码:

  createUser():void{
    this.loading = true;
      this.userService.createUser(new UserCreateDTO(this.userForm.get('userName').value, 
                this.userForm.get('emailAddress').value, 
                this.userForm.get('password').value))
      .subscribe(
        success =>{
            this.msgs.push({severity:'success', summary:'Success', detail: `User ${this.userForm.get('userName').value} succesfully created.`});
        },
        error =>{
          let errorMessage: string = error.???
            this.msgs.push({severity:'error', summary:'Error', detail: `error`});
        }),
        () =>{
          this.loading = false;
        }
  }
}

问号表示除了方法 html 之外没有任何方法建议出现。

正在发布帖子的服务端的代码:

  createUser(newUser: UserCreateDTO): Observable<Response> {
    return this.http.post<Response>(this.authUrl + "/user/create", newUser)
            .catch((error:any) =>{
                return Observable.throw(new Error(error.status));
            });
}

谢谢

标签: angularrxjsangular5rxjs5

解决方案


因此,标题将可用在HttpErrorResponse您在 .catch 中返回的内容上,但您将其标记为类型any,因此您不会看到代码建议。尝试catch((error: HttpErrorResponse) =>在您的服务中查看可用的内容。

然后,您将替换为HttpErrorResponse一个简单的Error对象,您只是将状态作为消息提供(这将error.message在组件中的错误处理程序中可用)。我认为您应该在服务中定义所需的错误详细信息,然后error.message在组件中使用。


推荐阅读