web学习笔记(四十一)

目录

1.生成器Generator

2.解决回调地狱的三种方法

3. Promise对象

3.1什么是Promise对象

3.2Promise对象解决异步地狱问题 

3.3Promise对象的三种状态和两个过程

3.4Promise的then方法


1.生成器Generator

       生成器主要用来解决异步操作的问题。是一个异步编程的解决方案,可以防止回调地狱(多层回调函数套在一起的情况)的发生。

    <script>// 生成器函数// 关键字  yield   中断生成器function* Gen() {console.log('AAA');yield '返回AAA';console.log('bbb');yield '返回bbb';console.log('ccc');yield '返回ccc';}let itertator = Gen()console.log(itertator.next()); //返回一个对象Object  /* done : falsevalue:  "返回AAA "*/itertator.next();itertator.next();</script>
  • 生成器区别于其他函数最关键的一项就是生成其中是有*号的,但是对*号的位置却没有限制,可以写在function前也可以写在function后。
  • 生成器函数返回的结果是迭代器 (iterator)对象,调用迭代器对象的 next 方法可以得到yield 语句后的值
  • 生成器可以传参也可以不传参。
  • 在生成器中  yield关键字有中断、暂停的作用,也可以将yield理解为是一个分隔符,每调用一次next方法,执行一段代码。 yield后面还可以跟一个值或表达式,调用next 方法可以得到
  • next 方法可以传递实参,作为 yield 语句的返回值
     <script>function* gen(arg) {console.log(111, arg);let a = yield 'aaa';
    //此时虽然声明了变量a,但却没有将yield 'aaa'赋值给a,
    //因为系统认定yield 'aaa'的结果是undefinedconsole.log(222, a);
    //这个a取到的数值是我们第二次调用next()方法传过来的实参,结果是bablet b = yield 'bbb';console.log(333, b);yield 'ccc';}let ittt = gen(444);console.log(ittt.next());console.log(ittt.next('bab'));console.log(ittt.next('cbc'));</script>

2.解决回调地狱的三种方法

  1. 方法一:用生成器来解决
        <script>function one() {setTimeout(function () {console.log('1');console.log( iii.next());}, 2000);};function two() {setTimeout(function () {console.log('2');console.log( iii.next());}, 500);};function three() {setTimeout(function () {console.log('3');console.log( iii.next());}, 1000);};function* time() {// one();yield one();// two();yield two();// three();yield three();};let iii = time();iii.next();</script>
  2. 方法二:Prominse对象中then方法来解决
  3. 方法三:async   await

3. Promise对象

3.1什么是Promise对象

Promise是一个原生对象,他本身就是一个构造函数 ,需要用new Promise(回调函数)来进行实例化,

这个对象和我们之前学习的对象不太一样,他的传参相对来说要复杂一些,Promise对象的参数就相当于一个函数。

let p=new Promise((resolve(成功函数),reject(失败函数))=>{})

3.2Promise对象解决异步地狱问题 

 Promise是异步编程的一种解决方案,相当于一个容器(放的程序是异步代码)它里面保存着某个未来才会结束的事件(比如ajax请求)从语法上说, Promise是一个对象,从它可以获取异步操作的消息。Promise提供统的API,各种异步操作都可以用同样的方法进行处理。

3.3Promise对象的三种状态和两个过程

         Promise对象代表一个异步操作,有三种状态

       三个状态(状态是不可逆):(1)等待状态:pending;(2)成功状态: fulfilled(resolve);(3)失败状态: rejected;

       两个过程:从等待到成功;从等待到失败。

3.4Promise的then方法

        then的第一个参数,就是是用于实现 resolve()方法; 第二个参数,就是用于实现 reject()方法.调用 resolve(); 相当于 执行then 是第一个函数。

    <script>let num = Math.floor(Math.random() * 10);console.log(num);let p1 = new Promise((resolve, reject) => {// resolve是一个函数名,成功//  reject是一个函数名,失败if (num > 5) {resolve();// resolve 为一个函数,当调用这个函数时promise的状态会从等待到成功} else {reject();// reject也是一个函数 当调用这个函数时promise状态会从等待到失败}});console.log(p1);// then()   Promise.prototype.then=// then()方法中有两个参数,参数一:是回调函数 (resolve这个函数的实现)// 参数二:是回调函数 (reject这个函数的实现)p1.then(() => {// 这个花括号里面写入的是resolve函数的代码console.log('成功');}, () => {// 这个花括号里面写入的是reject函数的代码console.log('失败');})</script>

 

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

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

相关文章

EasyExcel 导出动态表格

EasyExcel 导出动态表格 一般推荐使用方法二&#xff0c;但方法一也一定要看&#xff0c;会有很多收获。 需求 &#xff1a;前端选择对应列&#xff0c;导出对应列的数据&#xff0c;比如前端选择了 姓名、名称、学号列 那么就需要导出如下表格&#xff1a; ok&#xff0c;需…

面试题 之 react

1.说说对react的理解 1️⃣是什么 React是用于构建用户界面的 JavaScript 库,遵循组件设计模式、声明式编程范式和函数式编程概念&#xff0c;更高效使用虚拟 DOM 来有效地操作 DOM &#xff0c;遵循从高阶组件到低阶组件的单向数据流。 react 类组件使用一个名为 render() 的方…

爬虫高阶(一):解决验证码及爬取知网论文数据

爬取知网论文数据 解决验证码实现过程代码解决验证码 首先我们必须要识别出验证码,才能让进行下一步。 分享一个好用的网站 云码 接着按照流程操作来得到积分,点击个人中心查看自己的token即可(会用到,一次大约10积分,初始有300免费积分,1元能有1000积分) 实现过程…

[AIGC] MySQL与PostgreSQL事务完整性的对比

事务完整性是数据库管理系统最为重要的特性之一。在简单的术语中&#xff0c;一个事务可以被定义为一个逻辑单元的工作&#xff0c;它一旦被提交&#xff0c;要么全部成功&#xff0c;要么全部失败。这种“全部或无”的特性体现了一个数据库事务的原子性&#xff0c;是保证数据…

elementUI组件库样式修改整理

一、整体修改样式注意点 避免!important&#xff0c;能使用深度选择器就用深度选择器主题色使用变量&#xff0c;方便后期统一修改&#xff0c;最好新建一个单独的文件&#xff0c;专门用于定义公共变量样式文件尽量放在一个文件里&#xff0c;方便后期维护 二、单独element …

Css提高——Css3盒子模型border-box

1、盒子模型的种类与区别 CSS3 中可以通过 box-sizing 来指定盒模型&#xff0c;有2个值&#xff1a;即可指定为 content-box、border-box&#xff0c;这样我们 计算盒子大小的方式就发生了改变。 CSS3 盒子模型 可以分成两种情况&#xff1a; 1. box-sizing: content-box 盒…

安卓面试题多线程 111-115

111. 简述在 Java 中 Executor 和 Executors 的区别 ?Executors 工具类的不同方法按照我们的需求创建了不同的线程池,来满足业务的需求。 Executor 接口对象能执行我们的线程任务。 ExecutorService 接口继承了 Executor 接口并进行了扩展,提供了更多的方法我们能获得任务执…

ArcGIS Pro与R:携手优化生态系统服务评估流程

生态系统服务是指生态系统所形成的用于维持人类赖以生存和发展的自然环境条件与效用&#xff0c;是人类直接或间接从生态系统中得到的各种惠益。联合国千年生态系统评估&#xff08;Millennium ecosystem assessment&#xff0c;MA&#xff09;提出生态系统服务包括供给、调节、…

深度学习基础之《TensorFlow框架(9)—案例:实现线性回归》

一、线性回归原理复习 1、什么是线性回归 &#xff08;1&#xff09;有个假设函数&#xff0c;假定特征值和目标值满足这样的关系 w1x1 w2x2 ... wnxn b y &#xff08;2&#xff09;构造损失函数 均方误差、最小二乘法 &#xff08;3&#xff09;优化损失 正规方程和梯度…

electron-builder打包

打包配置&#xff1a; "build": {"appId": "cc11001100.electron.example-001", // 程序包名"copyright": "CC11001100", // 版权相关信息"productName": "example-001", // 安装包文件名"direct…

easyExcel 读取excel(按条读取)

MAVEN <!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel --><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.0.5</version></dependency>代码 import com.al…

Python 解析CSV文件 使用Matplotlib绘图

数据存储在CSV文件中&#xff0c;使用Matplotlib实现数据可视化。 CSV文件&#xff1a;comma-separated values&#xff0c;是在文件中存储一系列以‘&#xff0c;’分隔的值。 例如&#xff1a;"0.0","2016-01-03","1","3","20…

电子电工基础-二极管

二极管&#xff1a;单向导电性 工作区域&#xff1a;截止区、放大区、饱和区、反向击穿区 相关计算题 注意点&#xff1a;正向压降为0.7V&#xff0c;但是电流小&#xff0c;可以设为0.6V 在对其进行静态分析 可以得出静态直流的电流大小Id 根据二极管电流为26ma的特性&…

力扣刷题Days23-35.搜索插入的位置(js)

1&#xff0c;题目 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。请必须使用时间复杂度为 O(log n) 的算法。 2&#xff0c;代码 /*** param {number[]} nums*…

Vue+SpringBoot打造智慧家政系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 查询家政服务4.2 新增单条服务订单4.3 新增留言反馈4.4 小程序登录4.5 小程序数据展示 五、免责说明 一、摘要 1.1 项目介绍 基于微信小程序JAVAVueSpringBootMySQL的智慧家政系统&#xff0…

鸿蒙 Launcher与android Launcher的开发区别

鸿蒙&#xff08;HarmonyOS&#xff09;Launcher与Android Launcher在某些方面相似&#xff0c;但也存在一些明显的区别。尽管鸿蒙Launcher和Android Launcher都是用于用户与设备交互的界面&#xff0c;但由于底层架构、生态系统、开发语言和工具等方面的差异&#xff0c;它们在…

2024年亚洲图像处理趋势会议(ATIP 2024)即将召开!

2024年亚洲图像处理趋势会议&#xff08;简称&#xff1a;ATIP 2024&#xff09;将于2024年6月21日至23日在英国伦敦举行。在会议上我们将与相关领域的研究人员和知名专业人士共同讨论关于图像处理学科的最新研究方向及进展&#xff0c;评估当前最先进的技术和未来研究的关键领…

使用el-cascader组件写下拉级联多选并且具有全选功能

样式 说明&#xff1a; 级联选择器中加上全选的按钮&#xff0c; 并且保证数据响应式。 思路 因为是有全选的功能&#xff0c;所以不能直接使用el-cascader组件&#xff0c; 而是选择使用el-select组件&#xff0c; 在此组件内部使用el-cascader-panel级联面板全选按钮也是…

Win11配置WSL(Ubuntu)环境

一&#xff0c;什么是WSL WSL:Windows Subsystem for Linux&#xff0c;是用于Windows系统之上的Linux子系统。作用很简单&#xff0c;可以在Windows系统中获得Linux系统环境&#xff0c;并完全直连计算机硬件&#xff0c;无需通过虚拟机虚拟硬件 简而言之: Windows10的WSL功能…

【Android】图解View事件分发机制

文章目录 View事件分发机制dispartchTouchEvent()dispatchTouchEvent() 方法主要负责什么&#xff1f; onTouchEvent(event) 点击事件分发的传递规则自上而下自下而上 View事件分发机制 View的事件分发机制是Android中非常核心的一个概念&#xff0c;它负责处理触摸事件&#…