ES6 笔记03

01 回调地狱

回调地狱: 回调函数嵌套回调函数 嵌套过深导致维护不方便

02 promise语法的基本使用

promise语法的基本使用:

1.new Promise 对象 并接收新对象

2.在构造函数里面传入回调函数

3.回调函数里面有两个形参: resolve reject

resolve 表示积极状态

reject 表示消极状态

4.在回调函数里面写 异步的代码

5.一旦产生结果 需要调用resolve 或者reject函数

6.如果结果是积极地(正确的) 调用resolve(传入正确的结果)

如果结果是消极的(错误的) 调用reject(传入错误的结果)

7.外部通过Promise对象.then(回调函数) 接收正确结果

通过Promise对象.catch(回调函数) 接收错误结果

8.也就是说 Promise内部 如果最终执行的是resolve 那么外部就是then触发

如果内部最终执行的是reject 那么外部就是catch触发

03 Promise解决回调地狱

Promise是如何解决回调地狱的?

在then的回调函数里面可以继续return一个Promise对象

这样then方法就可以继续调用then方法了,

第二个then匹配到第一个then方法里面的Promise 以此类推

04 Promise语法中的catch

Promise里面异步代码执行正确 调用resolve 执行错误调用reject

catch的使用方法有两种:

1.Promise.then(正确结果的回调函数,错误结果的回调函数)

这样写的catch只能匹配当前promise对象的错误信息

如果是 链式编程 多个then 那么catch要放在外面 使用第二种写法

2.promise.then(正确的回调).catch(失败的回调)

如果有多个then方法 那么catch只需要写一个

但凡其中有一个promise对象 产生错误结果

那么立马匹配catch 剩余的then不在执行

05 promise的一些静态方法

promise 对象除了then 和catch 以外 还有finally 方法

也就是说本次promise对象无论触发的是then还是catch 都会执行finally方法

finally方法传入一个回调函数 回调函数没有参数 单纯的表示执行完成

可以把then和catch里面统一处理的代码 放到finally里面执行

promise的一些静态方法:

1.promise.all( )

参数需要传入一个数组 数组里面每个元素都是一个promise对象

作用: 同一时间开始执行数组内所有的promise代码

然后等到所有的promise的第一步代码全部执行完毕

一次性把所有的结果放到一个数组里面

all方法的返回值是一个promise对象 这个对象的then方法 里面接收总的结果

结果是数类型

但凡有任意一个promise的状态是reject 那么promise.all最终的状态就是reject

2.promise.race()

参数需要传入一个数组 数组里面每个元素都是一个promise对象

返回值是一个promise对象

作用: 多个promise一起执行 那个promise先执行完

那么就以这个promise的结果为最终结果

如果这个promise是失败状态 那么race最终就是失败

如果这个promise是成功状态 那么race最终就是成功

3.promise.any()

参数需要传一个数组 数组里面每个元素都是一个promise对象

返回值是一个promise对象

作用: 多个promise一起执行 哪个promise先执行完

那么就以这个promise的结果为最终结果

如果这个promise是失败状态 那么会找下一个执行完正确的结果的promise为最终结果

如果这个promise是成功状态 那么any就把当前结果作为最终结果

any方法的目的就是找正确的结果

如果第一个不正确就往下继续执行 哪一个正确就停止运行把结果返回

如果都失败就返回 AggregateError: All promises were rejected

Promise.reject();

这个方法可以快捷的诞生有一个状态为rejected的Promise对象

Promise.resolve()

这个方法可以快捷的诞生有一个状态为resolve的Promise对象

相关推荐
努力变厉害的小超超23 分钟前
ArkTS中的组件基础、状态管理、样式处理、class语法以及界面渲染
笔记·鸿蒙
逐·風3 小时前
unity关于自定义渲染、内存管理、性能调优、复杂物理模拟、并行计算以及插件开发
前端·unity·c#
Devil枫4 小时前
Vue 3 单元测试与E2E测试
前端·vue.js·单元测试
尚梦4 小时前
uni-app 封装刘海状态栏(适用小程序, h5, 头条小程序)
前端·小程序·uni-app
aloha_7895 小时前
从零记录搭建一个干净的mybatis环境
java·笔记·spring·spring cloud·maven·mybatis·springboot
GIS程序媛—椰子5 小时前
【Vue 全家桶】6、vue-router 路由(更新中)
前端·vue.js
前端青山5 小时前
Node.js-增强 API 安全性和性能优化
开发语言·前端·javascript·性能优化·前端框架·node.js
毕业设计制作和分享6 小时前
ssm《数据库系统原理》课程平台的设计与实现+vue
前端·数据库·vue.js·oracle·mybatis
dsywws6 小时前
Linux学习笔记之vim入门
linux·笔记·学习
清灵xmf8 小时前
在 Vue 中实现与优化轮询技术
前端·javascript·vue·轮询