Aurelia 中 fetch() 的错误处理

2024-02-04

我有一个 API,其中包含服务器引发错误(状态 = 500)时出现的问题的有用描述。该描述作为响应文本的一部分。我的客户端代码使用 Aurelia,通过以下方式调用 apiaurelia-fetch-client使用通用方法进行调用:

function callRemoteService(apiName, timeout) {
  return Promise.race([
    this.http.fetch(apiName),
    this.waitForServer(timeout || 5000)  // throws after x ms
  ])
    .then(response => response.json() )
    .catch(err => {
        if (err instanceof Response) {
          // HERE'S THE PROBLEM.....
          err.text().then(text => {
            console.log('Error text from callRemoteService() error handler: ' + text);
            throw new Error(text)
          });
        } else if (err instanceof Error) {
          throw new Error(err.message);
        } else {
          throw new Error('Unknown error encountered from callRemoteService()');
        }
    });
}

请注意,我想以一致的方式捕获服务器(获取或超时)错误,然后throw仅向调用视图返回一条简单的错误消息。我可以调用callRemoteService成功,当返回 500 时捕获错误:

callRemoteService(this.apiName, this.apiTimeout)
  .then(data => {
    console.log('Successfully called \'' + this.apiName +
      '\'! Result is:\n' + JSON.stringify(data, null, 2));
    })
  .catch(err => {
    console.log('Error from \'' + this.apiName + '\':',err)
    });

但是,我无法访问响应文本,因为fetch提供了text()返回承诺的方法,这会干扰我原本愉快的承诺链。上面的代码不起作用,给我留下了一个Uncaught (in promise) error.

希望有一种访问该响应文本的好方法吗?


这应该可以解决问题:

function callRemoteService(apiName, timeout = 5000) {
  return Promise.race([
    this.http.fetch(apiName)
      .then(
        r => r.json(),
        r => r.text().then(text => throw new Error(text))
      ),
    this.waitForServer(timeout)
  ]);
}

顺便说一句,我喜欢你正在做的事情Promise.race- 技术不错!

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

Aurelia 中 fetch() 的错误处理 的相关文章

  • angularjs:如何向资源对象添加缓存?

    在 http 中添加缓存非常简单 通过传递cache true http docs angularjs org api ng http https docs angularjs org api ng service 24http有缓存选项
  • 如何将udp发送到udp node.js服务器?

    我对此很陌生 所以我真的不知道我在做什么 但我已经设置了一个 node js udp 服务器 我想从客户端 来自网站 向它发送一个数据包 但我不知道如何在 javascript 中做到这一点 或者是否可能 我不是在研究如何从 Node js
  • 取消html5浏览器中的单图请求

    我正在动态加载 大 图像以绘制到 html5 画布中 如下所示 var t new Image t onload t src http myurl 但每隔一段时间就会想取消图片请求完全地 我想出的唯一方法是设置src to i e t sr
  • 用隐藏单元格补充 colspanned 表格有什么不好吗?

    我一直在表格上开发一些排序和选择功能 我发现在具有跨单元格的表格中定位非常困难 我只是添加了跨区单元格并将其隐藏 它看起来不错 它与我的 js 一起工作 非常适合索引 但我想知道这是否是合法的方法 stuffing display none
  • 如何使用 JavaScript 中的值填充下拉列表?

    我在 Tridion CMS 扩展中的功能区工具栏按钮中添加了一个按钮 单击该按钮后 将显示一个弹出页面 其中包含两个下拉菜单 通过更改第一个下拉控件中的值 我应该填充第二个下拉控件的值 就我而言 我正在使用ASP drop down li
  • 消息“在 jest.setTimeout 指定的 5000 毫秒超时内未调用异步回调”

    我正在使用 Puppeteer 和 Jest 来运行一些前端测试 我的测试如下 describe Profile Tab Exists and Clickable settings user gt test Assert that you
  • 如何按照编写的顺序迭代 javascript 对象属性

    我发现了代码中的一个错误 我希望通过最少的重构工作来解决该错误 此错误发生在 Chrome 和 Opera 浏览器中 问题 var obj 23 AA 12 BB iterating through obj s properties for
  • 如何使用 jest 模拟第三方库

    我正在开发一个node js应用程序使用nestjs我有一堂课叫LoggerService如下 export class LoggerService private logger Rollbar constructor this logge
  • 通过 node-http-proxy 保留基于 cookie 的会话

    我有一个简单的基于 Express 的 Node js Web 服务器 用于开发 JavaScript 应用程序 我将服务器设置为使用 node http proxy 来代理应用程序向在不同域和端口上运行的 Jetty 服务器发出的 API
  • 如果链接包含特定文本,jQuery 将类添加到 href

    我的网站上的列表中有一些动态填充的链接 这些链接链接到文件 是否可以使用 jQuery 查看文件名是否以 pdf 结尾 并在 href 或类似的链接文本以 mp3 结尾时添加一个类 例如 我的列表中有以下链接 文件1 pdf 歌曲1 mp3
  • Typeahead.js substringMatcher 函数说明

    我只是在做一些研究Typeahead js这是一个非常酷的图书馆 感谢文档 我已经成功地获得了一个基本的示例 该文档也非常好 但是我试图弄清楚以下代码块实际上在做什么 var substringMatcher function strs r
  • Twitter 嵌入时间轴小部件

    我继续下载http platform twitter com widgets js http platform twitter com widgets js And the http platform twitter com embed t
  • Chartjs刻度标签位置

    尝试让 Y 轴刻度标签看起来像image https i stack imgur com XgoxX png 位于秤顶部且不旋转 缩放选项当前如下所示 scales yAxes id temp scaleLabel display true
  • 为什么“tbody”不设置表格的背景颜色?

    我在用 tbody 作为 CSS 选择器来设置background color在一个表中 我这样做是因为我有多个 tbody 表内的部分 它们具有不同的背景颜色 我的问题是 当使用border radius在细胞上 细胞不尊重backgro
  • 查询为空 Node Js Sequelize

    我正在尝试更新 Node js 应用程序中的数据 我和邮递员测试过 我的开发步骤是 从数据库 MySQL 获取ID为10的数据进行更新 gt gt 未处理的拒绝SequelizeDatabaseError 查询为空 我认识到 我使用了错误的
  • 如何将函数内的捕获错误传递给父级

    我有这几行代码示例 想知道下面的逻辑到底如何 try var response child console log why here catch err console log should show this err function c
  • JavaScript onresize 事件多次触发

    我在尝试仅在触发 onresize 事件时运行一次函数时遇到一些麻烦 我已经看过这个问题DOM onresize 事件 https stackoverflow com questions 1500312 javascript onresiz
  • 需要有关 React Js 的帮助

    我是 React Js 新手 我的代码无法正常工作 请看下面 这是我的脚本文件Main jsx 该文件由 React 编译 输出放置在 dist 文件夹下的 main js 文件中 var react require react react
  • 使用异步调用时如何从 javascript 更新元刷新?

    我有一个系统 它使用元刷新来注销页面 该系统会在空闲用户后进行清理 不用担心 服务器也会导致会话超时 我开始通过 ajax 进行一些操作 不是真正的 xml 但这不是重点 我可以运行从异步请求返回的javascript 所以我想知道是否可以
  • 在 Javascript 中减少/分组数组

    基于this https stackoverflow com a 40774906 3254598例如 我想以稍微不同的方式按对象进行分组 结果应该如下 key audi items make audi model r8 year 2012

随机推荐

  • 减去oracle中的时间戳返回奇怪的数据

    我正在尝试减去两个日期并期望返回一些浮点值 但我得到的回报如下 000000000 00 00 07 225000 将值乘以 86400 我想得到秒内的差值 会返回更奇怪的值 000000007 05 24 00 000000000 任何想
  • 在 C++ 中我们是否应该更喜欢临时变量而不是用户定义的变量

    假设有一个 C 函数 foo 它返回一个布尔值 我调用此函数来检查属性的状态 或者获取函数调用的结果 那么调用此类函数的最佳方式是什么 方法一 bool flag foo if flag some code else else some c
  • 片段错误:类型不兼容,需要 android.app.fragment 但找到了 Activity.messagefragment

    Override public void onDrawerItemSelected View view int position displayView position private void displayView int posit
  • 如何在 Java 中将 ASCII 字符串转换为 UTF-8 字符串?

    如标题所示 如何在 Java 中将 ASCII 字符串转换为 UTF 8 字符串 Thanks 编辑 我的情况确实是我读取了一个中文字符串 当我输出它时 它都是乱码 我认为问题可能出在编码上 那么 如何正确地将字符串从乱码转换为正确的语言集
  • 存储或反映变量的“参考水平”

    C 中有没有一种方法可以反映变量的 指针级别数 例如 int a为1级 int b是 2 个级别 并且int c是 0 级 除了使用typeid并解析从中产生的字符串 我问的原因是我正在使用指向成员函数的指针 http www goingw
  • 如何在 SQL Server 中声明数组变量?

    我想在存储过程中执行一个查询 该查询应该循环所有数组值 例如 declare arrayStoreID 1001 2400 2001 5000 for int i 0 i
  • TreeMap中出现这个空指针异常是由于并发访问造成的吗?

    我知道TreeMap https docs oracle com javase 7 docs api java util TreeMap html不是线程安全的 我正在尝试将 TreeMap 与并发跳表映射 https docs oracl
  • 在折叠的 Bootstrap 手风琴中启动时,所选下拉菜单的宽度接近于零

    当选择的下拉菜单位于 Bootstrap 3 手风琴内部时最初隐藏 那么下拉菜单的宽度接近于零 展开后如下所示 而我希望它看起来像这样 当panel collapse collapse div没有in类 有效地表明它最初已经崩溃 这是重现此
  • UITableView 动态单元格高度仅在滚动后才正确

    我有一个UITableView与定制UITableViewCell使用自动布局在故事板中定义 该单元格有多个多行UILabels The UITableView似乎可以正确计算单元格高度 但对于前几个单元格 该高度未在标签之间正确划分 滚动
  • Rails:为模型创建脚手架以从超类继承?

    我是 Rails 的新手 仍然处于起步阶段 所以如果这是微不足道的或 错误的方式 做事 请原谅我 我想为一些脚手架模型创建一个超类 例如 我想创建一个脚手架Men并为Women 但我希望他们都继承自People超类 Men and Wome
  • 使用 Scrapy 和 selenium 抓取网站

    我要抓取 html 内容http ntry com scores named ladder main php http ntry com scores named ladder main php with Scrapy 但是 由于该网站的J
  • 如何使用单个查询从两个表中选择数据

    我一直在尝试了解如何使用单个查询从两个表中选择数据 如果有人能提出比单一查询更好的方法 我洗耳恭听 以前 我会使用两个查询来完成此操作 尽管我相信单个查询会更好 但我可以轻松地进行工作 因此尝试学习 我的一张桌子与此类似 但经过了简化 将此
  • 在R中安装依赖包时“无法移动临时安装”

    当我安装软件包时 先安装必备软件包 然后再安装实际软件包 我得到了 unable to move temporary installation 对所有必备包发出警告 但对实际包没有此类警告 但是当我加载该包时会出现错误 例如 当我insta
  • 从基类方法返回对派生类的引用

    我的任务是实现一个简单的 SVG 生成器 我需要支持圆 折线和文本 这三者至少有 4 个常用方法 设置描边颜色 设置填充颜色 设置描边宽度 字符串 主要要求之一是支持链接 例如 折线 SetStrokeColor 白色 SetFillCol
  • 按相同键对 JavaScript 数组对象进行分组

    我有一个对象数组 其中一些具有相同的月份名称 但基于日期的值不同 我们如何根据相同的属性值对数组对象进行分组 例如 month Jan value 3 month Jan value 3 5 month Feb value 2 1 mont
  • 什么任务最适合以函数式编程风格完成?

    我最近刚刚发现了函数式编程风格 我相信它将减少开发工作 使代码更易于阅读 使软件更易于维护 然而 问题是我很难说服任何人 嗯 最近我有机会就如何减少软件开发和维护工作进行演讲 我想向他们介绍函数式编程的概念以及它如何使团队受益 我的想法是向
  • 在项目的浏览器列表中配置的一个或多个浏览器

    我是离子框架的新手 启动离子应用程序时收到以下警告 请提出修复建议 ng One or more browsers which are configured in the project s Browserslist configurati
  • 鼠标移动/滚动到下一个哈希

    我添加了以下代码以便用鼠标滚动 通过单击 拖动滚动 而不是通过鼠标滚轮滚动 到目前为止 一切都很好 就像魅力一样 var clicked false clickY document on mousemove function e click
  • 枚举两个大数组的快速方法?

    我有两个大数组要处理 但让我们看一下下面的简化示例来了解一下这个想法 我想查找是否有一个元素data1与中的元素匹配data2并返回两者的数组索引data1 and data2如果以新数组的形式找到匹配项 index of data1 in
  • Aurelia 中 fetch() 的错误处理

    我有一个 API 其中包含服务器引发错误 状态 500 时出现的问题的有用描述 该描述作为响应文本的一部分 我的客户端代码使用 Aurelia 通过以下方式调用 apiaurelia fetch client使用通用方法进行调用 funct