ES6 - Promise
在MDN文档中,Promise是一个对象,代表一个异步操作的最终完成或者失败。在网上大多ES6教程中,认为Promise
是异步编程的一种解决方案,从语法上说是一个对象,从它可以获取异步操作的消息。
了解promise的工作方式文档:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Using_promises
内容提要:
- 原理:本质上Promise是一个函数返回的对象,我们可以在它上面绑定回调函数,这样我们就不需要在一开始把回调函数作为参数传入这个函数了。
- 拒绝事件:当 Promise 被拒绝时,会有已定义的两个事件(
rejectionhandled,
)之一被派发到全局作用域unhandledrejection
- 链式调用:连续执行两个或者多个异步操作
- 组合:
Promise.all()
和Promise.race()
是并行运行异步操作的两个组合式工具。 - 时序:为了避免意外,即使是一个已经变成 resolve 状态的 Promise,传递给
then()
的函数也总是会被异步调用 - 嵌套:简便的 Promise 链式编程最好保持扁平化
- 常见错误
Promise构造函数以及此类对象的方法和属性:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise
内容提要:
- Promise Constructor:构造函数主要是用于包装还未支持promises的函数
- Promise的三种状态:pending, fulfilled, rejected
- 方法
- Promise原型
- 创建Promise
阮一峰的ES6教程: https://es6.ruanyifeng.com/#docs/promise
内容提要:
- Promise的含义
- 基本用法:代码举例
- then方法
- catch方法
- Promise 对象的错误具有“冒泡”性质
reject()
方法的作用,等同于抛出错误- 一般来说,不要在
then()
方法里面定义 Reject 状态的回调函数(即then
的第二个参数),总是使用catch
方法 - 如果没有使用
catch()
方法指定错误处理的回调函数,Promise 对象抛出的错误不会传递到外层代码,即不会有任何反应
- finally方法:用于指定不管 Promise 对象最后状态如何,都会执行的操作
- all方法:用于将多个 Promise 实例,包装成一个新的 Promise 实例
- race方法:将多个 Promise 实例,包装成一个新的 Promise 实例
allSettled方法:
方法接受一组 Promise 实例作为参数,包装成一个新的 Promise 实例。只有等到所有这些参数实例都返回结果,不管是fulfilled
还是rejected
,包装实例才会结束。- any方法:只要参数实例有一个变成
fulfilled
状态,包装实例就会变成fulfilled
状态;如果所有参数实例都变成rejected
状态,包装实例就会变成rejected
状态 - resolve方法
- reject方法
- 应用