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

为什么fetch()使用ReadableStream作为响应体?[闭门]

王泓
2023-03-14

我正在学习fetch(),发现响应的主体使用了一种叫做readableStream的东西。根据我的研究,readable stream允许我们在从服务器下载数据后开始使用它(我希望我是正确的:)。就fetch()而言,可读流如何与fetch()配合使用,也就是说,我们无论如何都需要下载所有数据,然后开始使用它。总的来说,我无法理解fetch()中可读流的意义,因此我需要您的帮助:)。

共有1个答案

凌联
2023-03-14

这里有一个场景:一个原始的ASCII艺术“视频播放器”。

为了简单起见,想象一下这个演示中的“视频”帧是80 x 50=4000个字符。您的视频“解码器”读取4000个字符,在80 x 50的网格中显示字符,再读取4000个字符,依此类推,直到数据完成。

一种方法是使用fetch发送GET请求,将整个正文作为一个很长的字符串,然后开始显示。因此,对于100帧的“视频”,在向用户显示第一帧之前,它将接收400000个字符。

但是,为什么用户必须等待发送最后一帧,然后才能查看第一帧?相反,仍然使用fetch,从ReadableStream响应内容中一次读取4000个字符。您可以在剩余数据到达客户端之前读取这些字符。

潜在地,您可以在客户端的流开始时处理数据,甚至在服务器开始处理流结束时的数据之前。

潜在地,流甚至可能没有定义的endpoint(例如,考虑流式无线电台)。

在很多情况下,处理流式数据比处理整个响应更好。一个简单的例子是对来自某个数据源的一长串数字求和。您不需要一次读取内存中的所有数字,只需一次读取一个,将其添加到总数中,然后丢弃。

 类似资料:
  • 问题内容: 我正在尝试从JSON网址获取集合。骨干网确实发送了请求并得到了响应,但是在它之后的集合中没有: 这是我的JavaScript: 响应中的JSON 响应中的Content-Type HTTP标头为。 为什么不将其加载到集合中?JSON是否正确? 一些更多的代码: 问题答案: 是异步的。尝试 要么 要么

  • 我的环境: Shop RestController:Spring Boot 在localhost laptopn ubuntu 18:04 在localhost desktop pc windows 10上 邮递员要求: Spring引导控制器: 我已经尝试使用Observable和any以及HttpHeaders和Application/JSON,但响应相同。

  • 问题内容: 我无法使用RestTemplate(org.springframework.web.client.RestTemplate)应对额外的弹簧行为,但没有成功。 我在代码下面的Hole应用程序中使用,并且始终会收到XML响应,该响应会解析并评估其结果。 但是无法确定为什么执行后服务器响应为JSON格式: 我已经在较低级别的RestTemplate上进行了调试,内容类型为XML,但是不知道为

  • 问题是,尽管在调用FeedReturnStreamingOutput之前从资源发回响应,但Jersey客户端会等待FeedReturnStreamingOutput执行完成。 客户端代码:

  • 我是Java和创建API的新手。我试图简单地发出一个后请求,并得到一个具体的值。以下是我的代码: ProjectResponse类简单地包含: 问题是,id aøwaus 被返回为 (id=空)。即使当我使用“字符串”而不是项目响应时,一切正常,我看到ID已创建。因此,由于某种原因,将响应映射到项目响应类存在问题。 有人知道可能出了什么问题吗?

  • 我想知道为什么下面的代码没有定义到控制台?我已经消除了一个后端问题,因为当我使用broswers开发人员工具检查这个请求时,一切似乎都很好,而开发工具中显示的响应就是我所期望的json数据。谢谢你的帮助。