什么是Promise?
Promise 对象用于表示一个异步操作的最终完成或失败及其结果值。
本身是一个内置的构造函数,不是回调,是程序员自己new调用的。
new Promise的时候,要传入一个回调函数,它是同步的回调,会立即在主线程上执行,被称为executor函数,executor函数会接收到2个参数,分别用形参:resolve和reject两个函数接收,分别代表成功和失败。
基本编码流程
1.首先,创建一个Promise的实例对象(pending状态), 传入executor函数类型的参数
2.这个函数类型的参数又接收两个回调函数(resolve成功/reject失败)
3.状态机制:pending进行中、fulfilled成功、rejected失败
4.在executor中启动异步任务(定时器、ajax请求)
5.根据异步任务的结果,做不同处理:
5.1 如果异步任务成功了:
我们调用resolve(value), 让Promise实例对象状态变为成功(fulfilled),同时指定成功的value
5.2 如果异步任务失败了:
我们调用reject(reason), 让Promise实例对象状态变为失败(rejected),同时指定失败的reason
6.通过then方法为Promise的实例指定成功、失败的回调函数,来获取成功的value、失败的reason。
//then方法所指定的:成功的回调、失败的回调,都是异步的回调
解决了什么问题?
解决了地狱回调,而且因为有了resolve和rejec可以进行异步处理并且得知任务进度
回调地狱: 某个异步操作需要等到之前的操作完成, 当这样的需求多了以后, 使的代码进入无尽的嵌套