当前位置: 首页 > 知识库问答 >
问题:

为什么JavaScript获取API的响应对象是一个promise?

王德华
2023-03-14

当使用JavaScript读取API从服务器请求时,您必须执行以下操作

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

这里,响应。json()正在解决它的promise。

问题是,如果您想捕获404的错误,您必须解决响应promise,然后拒绝读取promise,因为只有在出现网络错误时,您才会以cat结束。所以取电话变成了类似于

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

这是一个更难理解和解释的问题。所以我的问题是:为什么需要这样做?将promise作为响应值有什么意义?有没有更好的方法来处理这个问题?


共有2个答案

江飞章
2023-03-14

因为有时候我们需要精确控制加载过程(从接收第一条数据到接收最后一条数据)。

在现实世界中,json可能不是一个好例子,因为它非常小。但是想象一个大图片被粗暴地加载的情况(从马赛克到清晰)。在这种情况下,当数据接收完成时,通知程序已经太晚了。

由于fetch()是一个相对较低级别的api,否则可以使用axios等。

明松
2023-03-14

如果您的问题是“为什么response.json()返回promise?”然后@Bergi在评论中提供了线索:“它等待身体加载”。

如果您的问题是“为什么response.json不是属性?”,然后,这就需要fetch延迟返回其响应,直到主体加载完毕,这对某些人来说可能是正常的,但不是每个人。

这个聚填料应该得到你想要的:

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));

反面不能用多边形填充。

 类似资料:
  • 问题内容: 从具有JavaScript fetch API的服务器请求时,您必须执行以下操作 在这里,正在履行诺言。 事实是,如果您想捕捉的错误,则必须解决响应承诺,然后拒绝获取承诺,因为只有在出现网络错误时才能结束。因此,提取调用就像 这是很难理解的原因。所以我的问题是:为什么需要这样做?将诺言作为响应值有什么意义?有没有更好的方法来解决这个问题? 问题答案: 如果您的问题是“为什么要返还诺言?

  • 我刚刚开始学习获取API:https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch 下面是我编写的一段代码片段,用于修补: 我希望从响应中得到一个JSON对象。json()。 与使用JSON时得到的类似。parse()。 相反,我得到了一个promise对象。 如果我像这里所示的那样扩大promise链... ..

  • 我正在使用Spring Web创建一个rest资源。我用Java创建了类似于Json响应的文档对象。当我使用String.class作为响应类型时,我从请求中获取响应。当我更改对我创建的类的响应时,boy是null。 这是我的httpgetter Json文档 函数调用 JSON响应

  • 这是我在班级游戏板。在这节课中,我尝试制作一个GameTree来返回这个棋盘上所有可能的下一步动作的列表。当这部分代码运行时,它会影响游戏板,因为它包含了这段代码,导致所有的移动实际上都是在游戏板上进行的,在游戏板上,我只是尝试用一个移动来返回板。下面是Gameboard中的代码: 我不明白为什么这不是简单地创建一个新的游戏板对象,播放有效的移动,并将其添加到列表。相反,在这个for循环结束时,游

  • 问题内容: 我想从Http get响应中获取一个对象: 这是我当前对Http get的代码: 这是convertSteamToString函数: 现在,我只是得到一个字符串对象。我如何找回JSON对象。 问题答案: 您获得的字符串只是JSON Object.toString()。这意味着您将获取JSON对象,但使用String格式。 如果应该获取JSON对象,则可以输入:

  • 我想从Http get响应中获取一个对象: 这是我当前的Http get代码: 这是转换的SteamToString函数: 现在我只是得到一个字符串对象。如何取回JSON对象。