web前端之JavaScript实现数据的流式获取、一边传输一边解析、fetch、getReader、TextDecoder、read、decode

MENU

  • 前言
  • 代码
  • TextDecoder
  • getReader
  • fetch


前言

1、此功能类似于GTP一样一点一点的解析数据,不需要等到所有数据都返回才解析,这个是回来多少解析多少。
2、代码中的url是真实的URL,只是读取的是列表,所以流式的效果不是很明显,如果想要明显的效果,可以自己实现一个接口返回字符串即可。


代码

const url = 'http://jsonplaceholder.typicode.com/posts';async function getResponse() {const resp = await fetch(url, {method: 'GET',headers: {'Content-Type': 'application/json'}});const reader = resp.body.getReader();const decoder = new TextDecoder();while (true) {const {done,value} = await reader.read();if (done) break;const txt = decoder.decode(value);console.log(done);console.log(txt);}
}getResponse();

TextDecoder

MDN

TextDecoder接口表示一个文本解码器,一个解码器只支持一种特定文本编码,例如UTF-8、ISO-8859-2、KOI8-R、GBK,等等。解码器将字节流作为输入,并提供码位流作为输出。
备注:此特性在Web Worker中可用


getReader

MDN

ReadableStream接口的getReader()方法会创建一个reader,并将流锁定。只有当前reader将流释放后,其他reader才能使用。


fetch

W3SCHOOL

Fetch API接口允许Web浏览器向Web服务器发出HTTP请求。
不再需要XMLHttpRequest。


MDN

Fetch API提供了一个JavaScript接口,用于访问和操纵HTTP管道的一些具体部分,例如请求和响应。它还提供了一个全局fetch()方法,该方法提供了一种简单,合理的方式来跨网络异步获取资源。
这种功能以前是使用XMLHttpRequest实现的。Fetch提供了一个更理想的替代方案,可以很容易地被其他技术使用,例如Service Workers。Fetch还提供了专门的逻辑空间来定义其他与HTTP相关的概念,例如CORS和HTTP的扩展。
请注意,fetch规范与jQuery.ajax()主要有以下的不同:
当接收到一个代表错误的HTTP状态码时,从fetch()返回的Promise不会被标记为reject,即使响应的HTTP状态码是404或500。相反,它会将Promise状态标记为resolve(如果响应的HTTP状态码不在200-299的范围内,则设置 resolve返回值的ok属性为false),仅当网络故障时或请求被阻止时,才会标记为reject。
fetch不会发送跨域cookie,除非你使用了credentials的初始化选项。(自2018年8月以后,默认的credentials政策变更为same-origin。Firefox也在61.0b13版本中进行了修改)
更详细介绍

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/194928.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ priority_queue

一、简介 Priority Queue(优先队列) 是一种常用的数据结构,它基于每个元素关联的优先级而组织元素,确保高优先级的元素先被处理。在实际应用中,优先队列常用于解决与优先级相关的问题,如任务调度、图算法等…

2312skia,16画布

创建SkCanvas 首先,阅读SkCanvasAPI概述. Skia有多个接收SkCanvas绘图命令的后端.每个后端都有创建SkCanvas的独特方式.本页给出了每个示例: 光栅化 光栅化后端将绘画到可由Skia或客户管理的内存块. 推荐用管理画布命令要绘画内存对象的SkSurface为Raster和Ganesh后端创建画…

用CHAT如何写教研室工作总结?

问CHAT:写一份教研室工作总结 CHAT回复:以下是一个教研室工作总结的大纳,具体内容需要根据你们教研室的实际情况进行填充和修改。 教研室XXXX年度工作总结 1. 引言:简要介绍本年度工作总结的目的和主题。 2. 教育教学工作&…

Java核心知识点整理大全24-笔记

目录 22. 数据结构 22.1.1. 栈(stack) 22.1.2. 队列(queue) 22.1.3. 链表(Link) 22.1.4. 散列表(Hash Table) 22.1.5. 排序二叉树 22.1.5.1. 插入操作 22.1.5.2. 删除操作 2…

知识点滴 - 什么是半透膜和渗透压

半透膜和渗透作用 1748年的一天,法国物理学家诺勒为了改进酒的制作水平,设计了这样一个试验:在一个玻璃圆筒中装满酒精,用猪膀胱封住,然后把圆筒全部浸在水中。当他正要做下一步的工作时,突然发现&#xff…

DDOS攻击为何永不过时?

文章目录 一、DOS二、DDOS三、如何防范DDOS 1.可以过滤IP地址2.增加设备3.在骨干节点配置防火墙4.开启过滤5.配置DNS抗攻击6.白帽团队 四、白帽子 为什么二十年前中国红客们就在用的DDOS攻击直到现在还依然是黑客们最爱的攻击方法?二十年前的攻击技术为什么还不过…

Day12——集合

1.集合 在内存层面需要针对于多个数据进行存储。此时可以考虑的容器有:数组、集合类。 数组存储多个数据方面的特点: 数组一旦初始化,其长度就是确定的。数组中的多个元素是依次紧密排列的,有序的,可重复的。数组一…

mysql数据库常见函数(时间函数)

一、mysql日期函数 ADDDATE(d,n) ; 计算起始日期 d 加上 n 天的日期 代码如下(示例): SELECT ADDDATE("2023-11-11", INTERVAL 31 DAY); ->2023-12-12ADDTIME(t,n); n 是一个时间表达式,时间…

基于Java SSM框架+Vue实现教学视频点播网站项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架Vue实现教学视频点播网站演示 摘要 随着现在网络的快速发展,网上管理系统也逐渐快速发展起来,网上管理模式很快融入到了许多学院的之中,随之就产生了“视频点播系统”,这样就让视频点播系统更加方便简单。 对于…

Java 学习之多态

多态的概念 多态 晚绑定。 所谓多态,就是父类型的引用可以指向子类型的对象,或者接口类型的引用可以指向实现该接口的类的实例。 不要把函数重载理解为多态。因为多态是一种运行期的行为,不是编译期的行为。 多态:父类型的引用可…

java源码-Java方法的定义和使用详解

1、 方法定义 如果我们想定义一个方法,基本语法如下: 修饰符:方法的修饰符是可选的,用于定义该方法的访问类型,可用的修饰符包括public/private/protected/默认的。 返回值:方法可以有返回值,…

线程中出现异常的处理

目录 前言 正文 1.线程出现异常的默认行为 2.使用 setUncaughtExceptionHandler() 方法进行异常处理 3.使用 setDefaultUncaughtExceptionHandler() 方法进行异常处理 4.线程组内处理异常 5.线程异常处理的优先性 总结 前言 在紧密交织的多线程环境中,异…

解决:ValueError: binary mode doesn‘t take an encoding argument

解决:ValueError: binary mode doesn‘t take an encoding argument 文章目录 解决:ValueError: binary mode doesn‘t take an encoding argument背景报错问题报错翻译报错位置代码报错原因解决方法方法一方法二今天的分享就到此结束了 背景 在使用之前…

USART的PAL库编程

USART驱动的工作原理 总结一下我们之前使用中断的方式来进行数据的发送和接收 如果收到数据数据在RDR寄存器中 RXNE标志位就从0到1触发中断 进入中断服务函数 把数据缓存在队列中 然后在到进程函数中断接收数据函数中进行出队处理 发送数据就是把中断关闭(标志位TXE…

日志模块Loguru

安装 Loguru 仅支持 Python 3.5 及以上的版本,使用 pip 安装即可: pip install loguru开箱即用 Loguru 的主要概念是只有一个:logger from loguru import loggerlogger.info("This is log info!") logger.warning("This i…

Python----网络爬虫

目录 1.Robots排除协议 2.request库的使用 3.beautifulsoup4库的使用 Python网络爬虫应用一般分为两部: (1)通过网络连接获取网页内容 (2)对获得的网页内容进行处理 - 这两个步骤分别使用不同的函数库:requests …

[Shell]获取Linux操作系统的发行版本

Linux命令uname -a输出分割成数组 # 将 uname -a 的输出分割成数组 IFS" " read -ra INFO <<< "$(uname -a)"# 打印数组中的各个元素 echo "System Name: ${INFO[0]}" echo "Node Name: ${INFO[1]}" echo "Kernel Vers…

食物相关的深度学习数据集合集—食物、饮料、肉类、餐具等数据集

最近收集了一大波与食物酒水相关的数据集&#xff0c;包含食物、饮料、肉类、餐具等不同等类型的数据集&#xff0c;废话不多说&#xff0c;给大家逐一介绍&#xff01;&#xff01; 1、自制啤酒配方数据库 超过20万自制啤酒配方数据库&#xff0c;数据集包含不同精酿啤酒的名…

危机公关之负面信息监测与处置原则

一家成功的企业不是没有人说它不好&#xff0c;而是企业通过公关或营销手段&#xff0c;让正面的声音碾压了负面的声音。小马识途建议企业创建之初就注意舆情公关的问题&#xff0c;不了解应该如何压制舆情负面信息的企业可以参考下面的几点建议。 1. 及时监测、观察、掌握和研…

C#有像Java ThreadLocal的类似实现吗?

在C#中&#xff0c;可以使用ThreadLocal<T>类来实现类似于Java中ThreadLocal的功能。ThreadLocal<T>类是.NET Framework提供的一个线程本地存储类&#xff0c;用于在每个线程中存储和访问特定于该线程的数据。 ThreadLocal<T>类允许每个线程都有自己独立的实…