为什么 JavaScript fetch API 的响应对象是一个承诺?

2023-12-14

当使用 JavaScript fetch API 从服务器请求时,您必须执行类似的操作

fetch(API)
  .then(response => response.json())
  .catch(err => console.log(err))

Here, response.json()正在兑现其承诺。

问题是如果你想抓住404的错误,你必须解决响应承诺,然后拒绝获取承诺,因为你只会以catch如果出现网络错误。所以 fetch 调用就变成了这样

fetch(API)
  .then(response => response.ok ? response.json() : response.json().then(err => Promise.reject(err)))
  .catch(err => console.log(err))

这是更难阅读和推理的事情。所以我的问题是:为什么需要这个?将承诺作为响应值有什么意义?有没有更好的方法来处理这个问题?


如果你的问题是“为什么response.json()返回一个承诺?”然后 @Bergi 在评论中提供了线索:“它等待正文加载”。

如果你的问题是“为什么不response.json属性?”,那么就需要fetch延迟返回响应,直到主体加载完毕,这对某些人来说可能没问题,但不是所有人。

这个polyfill应该能满足你的需求:

var fetchOk = api => fetch(api)
  .then(res => res.ok ? res : res.json().then(err => Promise.reject(err)));

那么你可以这样做:

fetchOk(API)
  .then(response => response.json())
  .catch(err => console.log(err));

反之则不能进行多重填充。

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

为什么 JavaScript fetch API 的响应对象是一个承诺? 的相关文章

  • 使用 vscode 调试器调试 next.js

    我已经使用安装了一个项目创建下一个应用程序 https github com segmentio create next app 我需要使用我的编辑器 vscode 调试服务器端渲染 所以我访问过vscode recipes 如何调试 ne
  • 如何测试 javascript 闭包内的函数

    这似乎是不可能的 也可能是 但我正在尝试更多的 TDD 但我总是在闭包方面碰壁 假设我有以下内容 function createSomething init function privateMethod param return init
  • 每 3 秒重复一次动画

    我正在使用 WOW js 和 animate css 现在我正在将 CSS 运行到 Infinite 我想知道如何让我的课程运行 3 秒停止并再次开始到无限 My html img src images fork png class for
  • 如何重定向到 instagram://user?username={username}

    我的 html 页面上有这个链接 可以在特定用户上打开 Instagram 应用程序 a href Link to Instagram Profile a 我一直在寻找自动运行 url instagram user username USE
  • 使用 jQuery/JS 打开时使
    标签的内容具有动画效果

    我只想要 HTML5 的内容details标记为 滑行 动画打开 而不是仅仅弹出打开 立即出现 这可以用 jQuery Javascript 实现吗 Fiddle http jsfiddle net 9h4Hq HTML
  • 如何防止 Iframe 在与浏览器交互后弄乱浏览器的历史记录?

    因此 就我而言 我使用 Iframe 将 Grafana 附加到我的页面 这为我提供了漂亮且易于使用的图表 可以注意到 每次在图表上进行放大或缩小 使用鼠标单击 交互后 Grafana 的 Iframe 都会在我的 Angular 页面上触
  • 如何抑制窗口鼠标滚轮滚动...?

    我正在开发嵌入页面中的画布应用程序 我有它 因此您可以使用鼠标滚轮放大绘图 但不幸的是 这会滚动页面 因为它是文章的一部分 当我在 dom 元素上滚动鼠标滚轮时 是否可以阻止鼠标滚轮在窗口上滚动 附加鼠标滚轮 不是 Gecko DOMMou
  • Node.js:如何在检索数据(块)时关闭响应/请求

    我正在用 node js 构建一个应用程序 它加载多个页面并分析内容 因为 node js 发送块 所以我可以分析这些块 如果一个块包含例如索引 nofollow 我想关闭该连接并继续其余部分 var host example com to
  • JavaScript 重定向到新窗口

    我有以下代码 它根据下拉列表的值重定向到页面 我如何使其在新窗口中打开 function goto form var index form select selectedIndex if form select options index
  • 如何将 Google Charts 与 Vue.js 库一起使用?

    我正在尝试使用 Vue js 库使用 Google Charts 制作图表 但我不知道如何添加到 div 这是我尝试做的 这是如何使用普通 javascript 添加图表 这是文档的代码示例 https developers google
  • MVC 在布局代码之前执行视图代码并破坏我的脚本顺序

    我正在尝试将所有 javascript 包含内容移至页面底部 我正在将 MVC 与 Razor 一起使用 我编写了一个辅助方法来注册脚本 它按注册顺序保留脚本 并排除重复的内容 Html RegisterScript scripts som
  • Meteor - 从客户端取消服务器方法

    我正在通过服务器方法执行数据库计数 用户可以选择他们希望如何执行计数 然后调用该方法 我的问题是 计数可能需要一些时间 并且用户可能会在方法运行时改变主意并请求不同的计数 有什么方法可以取消调用的方法并运行新的计数吗 我认为 this un
  • 在javascript中解析json - 长数字被四舍五入

    我需要解析一个包含长数字的 json 在 java servlet 中生成 问题是长数字被四舍五入 当执行这段代码时 var s x 6855337641038665531 var obj JSON parse s alert obj x
  • 表单计算器脚本基本价格未加载 OnLoad

    我的表单中有一个计算器来计算我的下拉选项选择 function select calculate on change calc input type checkbox calculate on click calc function cal
  • 稍后解决承诺

    我想构建一个 Promise 但将解决方案推迟到以后 下面的代码创建了一个承诺 但它立即得到解决 我如何控制承诺何时被评估 var p new Promise resolve reject gt resolve 1 then p1 gt c
  • FireFox 中的自动滚动

    我的应用程序是实时聊天 我有一个 Div 来包装消息 每条消息都是一个 div 所以 在几条消息之后 我的 DOM 看起来像这样 div div Message number two div div div div
  • 如何获取给定 DOM 元素的所有定义的 CSS 选择器?

    如何使用 jQuery 获取给定 DOM 元素的所有定义的 CSS 选择器 定义后 我的意思是在应用于任何样式表的所有 CSS 选择器document 在某种程度上 这类似于 FireBug 实现的功能 其中显示所选 DOM 元素的所有应用
  • 有没有办法阻止 prettier / prettier-now 将函数参数分解为新行

    当使用 prettier prettier now 在保存时进行格式化时 当一个函数包装另一个函数时 它会中断到一个新行 我想知道是否有办法阻止这种行为 例如 期望的输出 app get campgrounds id catchAsync
  • Safari 支持 JavaScript window.onerror 吗?

    我有一个附加到 window onerror 的函数 window onerror function errorMsg url line window alert asdf 这在 firefox chrome 和 IE 中工作正常 但在 s
  • 在 React.js 中编辑丰富的数据结构

    我正在尝试为数据结构创建一个简单的基于网格的编辑器 但我在使用 React js 时遇到了一些概念问题 他们的文档对此没有太大帮助 所以我希望这里有人可以提供帮助 首先 将状态从外部组件传输到内部组件的正确方法是什么 是否有可能将内部组件中

随机推荐

  • 如何在 CSS 中创建径向菜单?

    如何创建一个如下所示的菜单 链接到 PSD 我不想使用 PSD 图像 我更喜欢使用某些包中的图标 例如字体真棒并在 CSS 中生成背景 css 可以找到使用 PSD 生成工具提示图像然后使用它的菜单版本here 差不多三年后 我终于抽出时间
  • MongoClient.connect 没有响应

    我正在尝试按照其网站上的官方教程将我的 Node js Express 与我的 MongoDB 图集连接起来 这是我的conn js代码如下 const MongoClient require mongodb const Db proces
  • ggplot2 没有轴、图例等的图

    我想使用bioconductor的hexbin 我可以做到 来生成一个填充整个 png 显示区域的图 没有轴 没有标签 没有背景 没有任何内容 根据我在蔡斯的回答中的评论 您可以使用删除很多这样的东西element blank dat lt
  • 为功率计生成红色和绿色之间的颜色?

    我正在编写一个 Java 游戏 我想实现一个功率计来测量您射击某物的力度 我需要编写一个函数 它接受 0 100 之间的整数 并根据该数字的高低 它将返回绿色 功率刻度上的 0 和红色 功率刻度上的 100 之间的颜色 Similar to
  • System.Data.SqlClient.SqlException:用户登录失败

    在调试中使用我的项目没有任何问题 但是在 IIS 中运行它时出现此错误 System Data SqlClient SqlException 用户 domain name PC 登录失败 堆栈跟踪 SqlException 0x801319
  • 后缀的中缀和一元/二元运算符

    我有一段代码将中缀表达式转换为内存中的表达式树 这很好用 只是有一个小麻烦 我只是连接计算出如何正确地涉及一元运算符 正确的关联运算符 使用以下中缀表达式 1 2 3 4 我期望的 RPN 为 1 2 3 4 然而 我能找到的在线中缀后转换
  • 如何从 C# 更改 ApplicationBar 上的图像?

    我有一个带有 ApplicationBar 的小型 C 项目 但我有一个小问题 我想要在栏上有 8 个图标 而 ApplicationBar 只支持 4 个 我想出了一个解决方案 在 C 中 添加一个小 CheckBox 来询问用户是否要使
  • NATS 服务器在 Node.js 应用程序中给出 EAI_AGAIN 错误

    我正在尝试在本地运行微服务 单节点机器 我收到这个奇怪的错误 Error getaddrinfo EAI AGAIN nats service at GetAddrInfoReqWrap onlookup as oncomplete nod
  • scrapy爬行[蜘蛛名称]错误

    大家好 我正在使用 scrapy 框架和 python 构建一个网络抓取项目 在我的项目的蜘蛛文件夹中 我有两个名为蜘蛛1和蜘蛛2的蜘蛛 蜘蛛1 py class spider BaseSpider name spider1 蜘蛛2 py
  • JSP 不向 JQuery AJAX 返回数据

    这是我的功能 我正在尝试从下面的 JSP 页面获取数据 两个文件位于同一位置 我的错误是什么 sample js 包含在某些文件中 function getUnits ajax url js addunits jsp success fun
  • 如何从 Python 字典中删除键?

    我想从字典中删除一个键 如果存在 我目前使用这段代码 if key in my dict del my dict key 如果没有if语句 代码将引发KeyError如果关键是not展示 我怎样才能更简单地处理这个问题 See Delete
  • 无法访问 Newtonsoft.Json.Linq.JProperty 上的子值 - 使用 LinQ 检查 JObject 时发生错误

    我有一个包含 Json 数据的 JObject 对象 我需要收集所有 KeyValuePairs state true 在读取值之前 我想确保 JObject 至少有一个 KeyValuePairs 且 JToken Value 有 sta
  • 带有计数器或索引值的 Postgres JSONB_ARRAY_ELEMENTS

    假设我有这个order表 其中widgets列是一个jsonb array order no widgets 50 a b c 51 d e f select order no jsonb array elements text widge
  • 导入函数并使用“this”获取道具:“TypeError:无法读取未定义的属性‘renderElapsedString’”

    我是 React 新手 正在从 FullStackReact 书中创建一个时间记录应用程序 但使用 ES6 扩展 模块而不是 Create Class 话虽如此 我收到了这个错误 而且我不知道发生了什么 类型错误 无法读取未定义的属性 re
  • 在反应式表单上使用正则表达式进行 Angular 7 电子邮件验证

    在 Angular 上 我尝试使用以下正则表达式验证电子邮件 lt gt s lt gt s 0 9 1 3 0 9 1 3 0 9 1 3 0 9 1 3 a zA Z 0 9 a zA Z 2 就像下面这样 createGroupFor
  • 在 C++ 中处理许多进程的中央数据缓冲区

    我遇到了以下问题 无法决定如何继续 我有一堂课 Reader 每1 T秒获取一块数据 实际上数据来自视频帧 每秒30帧 这些块将被传递给多个对象 Detectors处理块并输出决策 然而 每个检测器在做出决定之前需要读取的块数量各不相同 例
  • 按组进行累加[重复]

    这个问题在这里已经有答案了 假设数据看起来像 group1 group2 num A sg 1 A sh 2 A sg 4 B at 3 B al 7 a lt cumsum data num 1 3 7 10 17 我需要一些团体积累的东
  • Android - 构建项目时出现多个错误

    我在构建项目时遇到这些错误 无法解决 firebase core 无法解决 multidex 无法解决 播放服务广告 无法解决 play services auth 无法解决 firebase auth license 无法解决 常见 请检
  • 黑莓录音示例代码

    有谁知道有一个好的存储库可以获取 BlackBerry 的示例代码吗 具体来说 可以帮助我学习录制音频的机制的示例 甚至可能对其进行采样并对其进行一些动态信号处理 我想读取传入的音频 如果需要的话可以逐个采样 然后对其进行处理以产生所需的结
  • 为什么 JavaScript fetch API 的响应对象是一个承诺?

    当使用 JavaScript fetch API 从服务器请求时 您必须执行类似的操作 fetch API then response gt response json catch err gt console log err Here r