Angular HttpClient 错误处理困难

2023-12-04

有关新 HttpClient 的 Angular 文档https://angular.io/guide/http有一个“获取错误详细信息”部分,其中显示了如下所示的示例。我已修改评论以记录我的观察结果,哪些基本错误类最终出现在哪里。

http
.get<ItemsResponse>('/api/items')
.subscribe(
  data => {...},
  (err: HttpErrorResponse) => {
    if (err.error instanceof Error) {
      // we never seem to get here
      console.log('An error occurred:', err.error.message);
    } else {
      // no network connection, HTTP404, HTTP500, HTTP200 & invalid JSON
      console.log(`Backend returned code ${err.status}, body was: ${err.error}`);
    }
  }
);

因此,单个通道上至少会出现 3 种完全不同类别的错误(网络、http、响应解析),并且对于每种类型,必须在 HttpErrorResponse 的另一部分中搜索实际原因。

通过标准错误码只能识别一类HTTP错误。但另外两种呢?

当我拔掉网络插头时,我得到了非常明显的 err.message =“(未知 url)的 Http 失败响应:0 未知错误。”非常具有描述性。

当新的内部 JSON 解析失败时,它表示存在语法错误 - 但不是在什么位置/字符(由 JSON.parse() 返回)。也可以看看here

超时等其他错误怎么办?

我在哪里可以找到这方面的文档?有没有人找到一种方法来普遍分析这个问题,以便可以向用户提供有意义的消息?

Win 上 Chrome 中的 Angular 5.2,后端:ASP.NET4.6.1 纯 IHttpHandler


我不得不看看角度源代码了解可能的错误情况。错误对象将始终是HttpErrorResponse,但其error财产可能会根据情况而有所不同。这是使用默认值时可能发生的情况XHRBackend使用默认的responseType of 'json':

收到的响应带有指示错误的 HTTP 状态代码(不是 200-299):

HttpErrorResponse.error将被解析为 JSON 的正文or如果解析失败,则正文为文本。

收到的响应具有良好的 HTTP 状态代码 (200-299),但正文无法解析为 JSON:

HttpErrorResponse.error将是一个类型为的对象HttpJsonParseError有两个属性:

  • error:解析错误(类型Error)
  • text: 正文

由于 XHR 网络错误,未收到响应:

HttpErrorResponse.error将是一个 XHRProgressEvent类型设置为'error'。 (它可能被错误地输入为ErrorEvent在旧版本的 TypeScript 中。)


Note:Angular 在发出请求时不会设置超时,也不会注册超时事件处理程序。默认 XHR 超时为 0,因此客户端请求永远不会超时。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angular HttpClient 错误处理困难 的相关文章

随机推荐

  • 如何在 Android 中录音电话

    我需要在我的 Android 应用程序中录制电话 我尝试过使用 MediaRecorder 将 AudioSource 设置为 MIC VOICE COMMUNICATION VOICE CALL 和其他选项 但他们都没有记录通话 任何人都
  • Python - 使用正则表达式查找多个匹配项并将其打印出来[重复]

    这个问题在这里已经有答案了 我需要从 HTML 源文件中查找表单内容 我做了一些搜索并找到了很好的方法来做到这一点 但问题是它只打印第一个找到的内容 我如何循环遍历它并输出所有表单内容 而不是只是第一个 line bla bla bla
  • Firestore - 监听特定字段的变化?

    如何使用 firestore js sdk 监听特定字段的变化 在文档中 他们似乎只展示了如何监听整个文档 如果任何 SF 字段发生变化 就会触发回调 db collection cities doc SF onSnapshot funct
  • 使用反向引用和哈希时的 Ruby gsub 问题

    以下代码定义带有正则表达式 键 和替换 值 的哈希 然后它迭代哈希并相应地替换字符串 简单的字符串替换效果很好 但是当我需要在替换之前计算结果时 几年到几天的情况发生变化 它就不行了 预先定义哈希值是关键 我缺少什么 任何帮助将不胜感激 a
  • 通过 OLE 从 Ruby 或 VBS 调用时,Word Document.SaveAs 会忽略编码

    我有一个脚本 VBS 或 Ruby 可以将 Word 文档保存为 过滤后的 HTML 但编码参数被忽略 HTML 文件始终以 Windows 1252 进行编码 我在 Windows 7 SP1 上使用 Word 2007 SP3 红宝石示
  • 如何使用 jQuery 悬停、更改、切换图片

    我正在做我的项目 我正在努力做到这一点 我想让每个图像的点击都能正常工作 这样每个图像都有自己的纸张 需要它悬停 我想使用切换百叶窗效果 我读到 在这方面使用 CSS 背景是明智的 这样我可以交换图片 但我无法理解它 我已经采取了一些代码来
  • Java 8 Firebase Tasks.await()

    我在 Spring Boot 应用程序中使用 Firebase JAVA sdk 尝试验证 firebase 令牌 映射 resp new HashMap Task
  • 使用 dplyr 计算组平均值,同时排除当前观察值

    Using dplyr 最好 我试图计算每个观察值的组平均值 同时从组中排除该观察值 看来这应该可以通过组合来实现rowwise and group by 但这两个功能不能同时使用 给定这个数据框 df lt data frame grou
  • Rust 正则表达式模式 - 无法识别的转义模式

    我确实有以下字符串 lengthSeconds 2664 我想与这个正则表达式匹配 Regex new lengthSeconds d 我什至尝试过这个 Regex new r lengthSeconds d 但我得到这个 regex pa
  • SWT 全局 KeyListener 按钮焦点问题

    对于我的应用程序 我需要空格键来调用独立于焦点小部件的函数 在应用程序中的任何位置 但前提是打开相应的选项卡 我发现可以在显示中添加一个过滤器 如下所示 getShell getDisplay addFilter SWT KeyDown n
  • 如何将带有空格的路径存储到bash中的变量中

    我想存储 c users me dir name到一个变量中将其传递给cd系统调用 键入时有效 cd c users me dir name or cd c users me dir name 但如果我存储它则不起作用 dirname c
  • 延迟加载 FXProperties

    这是来自的后续here 我正在实现一个表 它将数据异步加载到表单元格中 问题是 表格单元格有时无法正确更新 有时它会以某种方式 挂起 并且永远显示 正在加载 仅当我在表格中滚动一点时 实际值才会更新 重现 运行应用程序并在表中快速向下滚动
  • Javascript:显示大数字时如何避免科学记数法

    基于 为了可读性 JavaScript使用科学记数法来显示非常大的数字 大于或等于1021的绝对值 例如 写入语句 document write 1000000000000000000000000 会产生输出 1e24 我可以避免显示科学记
  • 如何使用text strip()函数?

    我可以删除数字 但不能删除字母字符 gt gt gt text 132abcd13232111 gt gt gt text strip 123 abcd 为什么以下不起作用 gt gt gt text strip abcd 132abcd1
  • PDFBox - 直线/矩形提取

    我正在尝试从 PDF 中提取文本坐标和行 或矩形 坐标 The TextPosition班级有getXDirAdj and getYDirAdj 根据相应 TextPosition 对象表示的文本片段的方向转换坐标的方法 根据 mkl 的评
  • 使用和不使用 pytest-mock 来模拟标准库函数

    出于测试目的 我想模拟 Shutil which Python 3 5 1 它在简化方法 find foo 中调用 def find foo self gt Path foo exe which foo path None if foo e
  • 在python中循环遍历json数组

    我在一个数组中有 JSON 我正在将其导入到我的脚本中 ip address 192 168 0 1 192 168 0 2 192 168 0 3 我正在加载 JSON 并声明一个名为 ip address 的变量 data yaml l
  • 获取每天的总浏览次数,包括没有记录的一天留下“0 浏览次数”

    我正在创建一个图表 我可以在其中获得特定范围内每天的总观看次数 或者只要它可以返回 我遇到的问题是填写默认数量0当某一天没有浏览量时 有些日子可能一天中绝对没有浏览量 所以我需要MySQL返回默认值0当没有找到时 我不知道该怎么做 这是我用
  • 如何替换视图控制器(或从导航堆栈中删除)而不是推送segue?

    I have 一个小的 iPhone 应用程序 它使用导航控制器显示 3 个视图 此处全屏 首先 它显示社交网络列表 Facebook Google 等 然后它会显示一个 OAuth 对话框 要求提供凭据 并且 之后 在同样的UIWebVi
  • Angular HttpClient 错误处理困难

    有关新 HttpClient 的 Angular 文档https angular io guide http有一个 获取错误详细信息 部分 其中显示了如下所示的示例 我已修改评论以记录我的观察结果 哪些基本错误类最终出现在哪里 http g