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() 的错误处理 的相关文章

  • 将鼠标悬停时的鼠标光标更改为锚状样式

    如果我将鼠标悬停在div鼠标光标将更改为 HTML 锚点中的光标 我怎样才能做到这一点 假设你的div has an id myDiv 将以下内容添加到您的 CSS 中 这cursor pointer指定光标应与用于锚点 超链接 的手形图标
  • 如何使用 JavaScript 创建链接?

    我有一个标题字符串和一个链接字符串 我不知道如何将两者放在一起以使用 JavaScript 在页面上创建链接 任何帮助表示赞赏 我试图解决这个问题的原因是因为我有一个 RSS 源并且有一个标题和 URL 列表 我想将标题链接到 URL 以使
  • 渲染货币和符号并与来自不同单元格的数据相结合

    我正在使用最新的 jQuery DataTables v1 10 7 我正在尝试将数字解析为以下格式 239 90 USD 我可以使用此命令使货币正常工作 columns data Price render fn dataTable ren
  • JavaScript 中的埃拉托斯特尼筛法对大量数据无限运行

    我一直在尝试写埃拉托斯特尼筛法 http en wikipedia org wiki Sieve of EratosthenesJavaScript 中的算法 基本上我只是按照以下步骤操作 创建从 2 到 n 1 的连续整数列表 令第一个素
  • 以编程方式填写reactjs表单

    我正在编写一个用户脚本 但无法填写由reactjs制作的表单 我的代码 document querySelector id username value email protected cdn cgi l email protection
  • 使用 JavaScript 禁用第三方 cookie

    我正在努力根据所有在欧盟运营的公司的数据保护规则实施新的 Cookie 政策合规性 根据该规则 用户在使用任何网站时必须能够拒绝 接受除必需的 Cookie 之外的所有内容 在我客户的网站中 我可以看到正在存储以下第三方 cookie ga
  • 带有淘汰赛js的隐形recaptcha

    我正在完成隐形验证码 但我在实现它时遇到问题 谷歌开发人员页面中的代码显示它应该是这样的
  • 可以在初始 DOM 解析期间/之前修改 DOM 吗?

    是否可以在初始 DOM 解析期间或之前修改 DOM 或者我是否必须等到 DOM 被解析和构建之后才能与其交互 更具体地说 是否有可能阻止 DOM 中的脚本元素使用用户脚本 内容脚本或 Chrome 或 Firefox 中的类似脚本运行 在解
  • 隐藏 Div 的父级

    我只是想隐藏父divcomments section div class content content green div div div 我试过这个 document getElementById comments section pa
  • Bootstrap按钮加载+Ajax

    我正在使用 Twitter Bootstrap 的按钮加载状态 http twitter github com bootstrap javascript html buttons http twitter github com bootst
  • 如何纠正流警告:解构(缺少注释)

    我正在编写一个小型 React Native 应用程序 并且正在尝试使用 Flow 但我无法在任何地方真正获得有关它的正确教程 我不断收到错误 destructuring Missing annotation 有关 station 这段代码
  • 调整图像大小并将画布旋转 90 度

    这里有很多关于在 js 上使用画布旋转图像的主题 我阅读了其中的大部分内容 但无法找到解决我的问题的方法 我正在接收任何分辨率的图像 来自上传组件 我将其大小调整为 1024x768 如下所示 var canvas document cre
  • 尝试将数据存储在点击器网站中

    我正在尝试存储一个名为的变量score无论何时刷新 您都会一次又一次地使用它 我不明白的是它的代码是什么 我尝试了一些方法 但似乎都不起作用 这是我的答题器网站 但是当我尝试使用 JavaScript 来存储它时 它不起作用window o
  • Javascript split 不是一个函数

    嘿朋友们 我正在使用 javascript sdk 通过 jQuery facebook 多朋友选择器在用户朋友墙上发布信息 但是我收到此错误friendId split 不是函数 这是我的代码 function recommendToFr
  • 检查 jQuery 1.7 中是否存在基于文本的选择选项

    所以我有以下 HTML 片段
  • window.location 和 location.href 之间的区别

    我对之间的区别感到困惑window location and location href 两者似乎都以相同的方式行事 有什么不同 window location是一个对象 它保存有关当前文档位置的所有信息 主机 href 端口 协议等 lo
  • 页面上使用 HTML Editor Extender 进行回发会导致 IE11 中出现 JavaScript 错误

    我已将 HTML 编辑器扩展程序添加到我正在处理的页面中 现在每当我在页面上发回帖子时 都会收到以下 Javascript 错误 JavaScript 运行时错误 参数无效 之后什么也没有发生 这在 IE10 或更低版本以及我所知道的所有其
  • 可以设置标题样式吗? (并且使用CSS或js?)[重复]

    这个问题在这里已经有答案了 我想知道是否可以设计一个title a href title This is a title Hello a 样式问题有两个方面 文本格式 编码 我猜这是可能的 所以在问题中这样做 工具提示样式 你能把它弄大一点
  • 如何用另一个响应替换窗口的 URL 哈希?

    我正在尝试使用替换方法更改哈希 URL document location hash 但它不起作用 function var anchor document location hash this returns me a string va
  • 如何在执行新操作时取消先前操作的执行?

    我有一个动作创建器 它会进行昂贵的计算 并在每次用户输入内容时调度一个动作 基本上是实时更新 但是 如果用户输入多个内容 我不希望之前昂贵的计算完全运行 理想情况下 我希望能够取消执行先前的计算并只执行当前的计算 没有内置功能可以取消Pro

随机推荐

  • 减去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