generator和promise和async的异同

news2024/11/28 5:38:01

一、generator(生成器)是ES6标准引入的新数据类型,他和promise一样都是异步事件的解决方案

		//generator函数生成斐波那契
        // generator(生成器)是ES6标准引入的新数据类型,async就是 Generator 函数的语法糖
        //本质:用来处理异步事件的对象/包含异步操作的容器
        function* fib(num){
            console.log(this);  //window,赋值给f之后,执行相当于window.f.next()
            let n=0
            let a=0
            let b=1
            while(n<num){
                // yield后面一定要加分号,不然会接收后面的一切
                yield a;
                // 解构赋值交换变量,无需中间值
                [a,b]=[b,a+b]
                n++
            }
            return
        }
        console.log(Object.prototype.toString.call(fib));
        //[object GeneratorFunction],但是js无法直接读取Generator构造函数
        let f=fib(5)
        console.log(f);	//结果看图示
        console.log(f.next());

console.log(f)的结果,是一个Generator实例
console.log(f)的结果

二、Promise

本质:用来处理异步事件的对象/包含异步操作的容器
作用:promise可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。
缺点:
1.无法取消promise,一旦新建就会立即执行,无法中途取消。
2.而且如果不设置回调函数,promise抛出的错不会反应到外部
3.当处于Pending状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)。
4.Promise 真正执行回调的时候,定义 Promise 那部分实际上已经走完了,所以 Promise 的报错堆栈上下文不太友好。

三、async为什么比promise更好

简单概况promise和async的优缺点就是:使用async函数可以让代码简洁很多,不需要像Promise一样需要些then,
不需要写匿名函数处理Promise的resolve值,也不需要定义多余的data变量,还避免了嵌套代码。错误处理:Async/Await
让 try/catch 可以同时处理同步和异步错误。

四、async为什么比generator更好

async为什么比generator更好
1.内置执行器。
2.更好的语义
3.返回值是 Promise
4.更广的适用性

五、异步请求的解决方式有以下六种方式

异步请求的解决方式有以下六种方式
①回调函数:实现简单、易于理解。但不利于后面的维护等,不可用 try-catch 去捕获错误,也不可以直接 return 出来。
②事件监听:易于理解,可同时指定多个回调函数,利于模块化。但是很难看出主流程是到底是哪一个。
事件,promise,generator,async和await。
③发布订阅:与事件监听类似,但是相对比事件监听好些。因为可以通过“发布者”,有多少订阅者,从而监控程序的运行。
④Promise:一般用于网络请求、读取本地文件等较长时间的操作,可通过then/catch/finally等链式调用,解决回调地狱问题。但是也有以上说的四点缺点。
⑤Generators/ yield:语法行为与传统函数完全不同,强在可以控制函数的执行。比较抽象难懂。
⑥async/await:async返回的一般是 promise实例对象,await后面跟的可以是表达式/请求。且通俗易懂。

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

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

相关文章

Rust语言从入门到入坑——(4)Rust语法(中)

文章目录 0 引入1、函数1.1、函数参数1.2、函数体1.3、函数返回值 2、条件语句3、循环3.1 、while3.2 、for3.3 、loop循环 4、总结 0 引入 在这里我们需要介绍Rust语法&#xff0c;一共分三部分&#xff0c;第二部分主要是一些如函数&#xff0c;编程中的循环等语法的介绍&am…

小白到运维工程师自学之路 第三十九集 (HAproxy 负载均衡)

一、概述 HAProxy是一款高性能的负载均衡软件&#xff0c;可以将来自客户端的请求分发到多个服务器上&#xff0c;以提高系统的可用性和性能。HAProxy支持多种负载均衡算法&#xff0c;包括轮询、加权轮询、最少连接数等。同时&#xff0c;HAProxy还支持会话保持、健康检查、SS…

redis和mysql

文章目录 一、redis1.1 redis的数据结构都有哪些&#xff1f;1.2 持久化方式有哪些&#xff1f;1.3 怎么保证缓存和数据库数据的一致性?1.4 redis缓存是什么意思&#xff1f; 二、数据库2.1 基本数据类型2.2 MySQL 的内连接、左连接、右连接有什么区别?2.3 MySQL 问题排查都有…

第二章(第三节):导数的应用

1.洛必达法则 1.用途 能够使用洛必达法则解决常见的未定式问题。2.极限下的未定式 如果当 x→a 或 x→∞ 时,函数f(x)和g(x)均趋于零或者无穷,那么极限:可以存在,也可能不存在。通常这种极限为:0/0型或∞/∞型未定式。3.示例 1.lim x→0; (1-cosx) / x 2 ^2

机器人开发--Fast DDS

机器人开发--Fast DDS 1 介绍1.1 DDS概述1.2 Fast DDS 介绍域与域通信跨网络通信 2 内容要素与组件介绍IDL &#xff08;Interface Definition Language&#xff09;eProsima Fast DDS-Gen&#xff1f; 3 安装步骤3.1 安装选择&#xff08;linux源码cmakec&#xff09;3.2 模块…

shardingsphere第四课shardingsphere-proxy的使用

一、为什么要有服务端分库分表&#xff1f; 配合 ORM 框架使用更友好 当使用 ShardingSphere-JDBC 时,需要在代码中直接编写分库分表的逻辑,如果使用 ORM 框架,会产生冲突。ShardingSphere-Proxy 作为服务端中间件,可以无缝对接 ORM 框架。 对 DBA 更加友好 ShardingSphere-Pr…

第八章 time模块

1. time模块介绍 time 模块提供了各种时间相关的函数&#xff0c;该模块中对于时间表示的格式有如下三种&#xff1a; 时间戳&#xff08;timestamp&#xff09;&#xff1a;时间戳表示的是从1970 年1 月1 日00:00:00 开始按秒计算的偏移量。 时间元组&#xff08;struct_tim…

每日复盘|6月19日

7:00-7:20 起床洗漱到教室 7:30-8:15 乐词 8:15-9:05 听力con*1 lec*1 9:05-10:47 听力真题 11:00-11:50 考研英语阅读真题 12:00-12:30 午饭🥣+桃子🍑 12:30-13:30 不背单词 13:30-14:00 午睡 14:00-…

SpringMVC07:Ajax研究

目录 一、项目启动时报错点 二、简介 三、伪造Ajax 四、jQuery.ajax 五、Springmvc实现一个list集合显示前端 六、注册提示效果 一、项目启动时报错点 6月 16, 2023 10:34:37 上午 org.apache.catalina.core.StandardContext filterStart 严重: 启动过滤器异常 java.lan…

6-JMM

目录 1.主内存与工作内存 2.内存间交互操作 Java内存模型的三大特性&#xff1a; happens-before原则&#xff08;先行发生原则&#xff09;&#xff1a; 3.volatile型变量的特殊规则 ①保证此变量对所有线程的可见性 ②使用volatile变量的语义是禁止指令重排序 JVM定义…

node.js+vue+express企业客户关系管理系统mysql

开发语言 node.js 框架&#xff1a;Express 前端:Vue.js 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat 开发软件&#xff1a;VScode 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身…

21.模糊神经网络预测水质评价(附matlab程序)

1.简述 学习目标&#xff1a;模糊神经网络预测水质评价——重风水厂、 高升水厂、秦玺水厂 采用模糊神经网络预测这三个水厂的水质&#xff0c;并进行对比 模糊神经网络(Fuzzy Neural Network, FNN) 背景 系统复杂度的增加&#xff0c;人工智能深度化发展 模糊数学创始人L. A…

io.netty学习(四)ChannelHandler

目录 前言 正文 ChannelHandler ChannelInboundHandler ChannelOutboundHandler ChannelDuplexHandler 总结 前言 先简略了解一下ChannelPipeline和ChannelHandler的概念。 想象一个流水线车间。当组件从流水线头部进入&#xff0c;穿越流水线&#xff0c;流水线上的工…

第四章 组合逻辑电路--数电(期末复习笔记)

第四章 组合逻辑电路 本章重点&#xff1a; 1. 组合逻辑电路的分析与设计方法 2. 常用组合逻辑模块的使用 4.1 概述 4.11 组合逻辑电路 任一时刻的输出仅取决于该时刻的输入&#xff0c;与电路原来的状态无关。4.12 时序逻辑电路 任一时刻的输出不仅取决于现时的输入&am…

电容的基本工作原理

目录 电容器的发展历程现象发现第一个存储电荷的元器件&#xff1a;莱顿瓶真正出名的时刻 为什么电容器的容量单位称为法拉&#xff1f;电容器和电容的区别电容的组成电介质与电解质对电容的影响电容是如何工作的通交流阻直流阻直流通交流 电容器的单位电容的容抗电容常见的种类…

Idea Mybatis插件:提高CRUD效率

mybatis-sql-viewer插件主要提供能力&#xff1a;将mybatis xml转成真实SQL语句、参数mock、SQL规范检查、SQL索引检查、SQL运行、SQL压测及Mybatis SQL语句扫描。 1. 简介 虽然写了很久的CRUD&#xff0c;但是依旧觉得写好CRUD是一件非常难且麻烦的事情&#xff0c;以下的情…

chatgpt赋能Python-python找出不同部分

介绍 在SEO&#xff08;Search Engine Optimization&#xff09;领域&#xff0c;比较常见的问题之一是如何快速有效地查找出两段文本的不同部分。这对于优化网站内容或对比竞争对手的网站内容都非常有用。Python作为一种强大的编程语言&#xff0c;其特性和库使得这种任务变得…

神经网络入门①多层感知器如何解决异或问题?

文章目录 1. 多层感知器2. BP算法参考文献 1. 多层感知器 感知机&#xff08;perceptron&#xff09;早在20世纪50年代就提出来了1&#xff0c;但直到近几年深度学习的崛起&#xff0c;神经网络才再次走入大众的视野&#xff0c;并且成为了当下最热门的研究方向之一。 一个单层…

MybatisPlus的save方法

当我前端传递的是一个整合的数据模型Dto,需要同时插入俩张表,并且其中一张表的属性需要得到另一张表的id,如何实现呢?这个时候MP封装好的插入方法:save就起了很好的作用 public R<String> SaveNewDish(DishDto dishdto) { // 1. 保存菜品基本信息log.info("前…

MySQL优化--覆盖索引,超大分页查询

目录 覆盖索引 MYSQL超大分页处理 面试回答 大纲 回答 覆盖索引 覆盖索引是指查询使用了索引&#xff0c;并且需要返回的列&#xff0c;在该索引中已经全部能够找到 。 MYSQL超大分页处理 在数据量比较大时&#xff0c;如果进行limit分页查询&#xff0c;在查询时&#…