最主要的功能是解决回调地狱的问题
只要面试官.提到了 promise 下面内容全部说出来
1 promise 程序执行的特点
- 1: new Promise(构造函数的回调函数)中的回调函数是同步执行的
- 2: 原型方法的回调函数,都是异步执行的, 属于异步消息队列中的微任务.(then,catch,finally)
2 promise有三种状态
- pending
- resolve/ fulfilled 已接收
- reject 已拒绝
peomise api 分类
- 原型api
- 静态pai
- 所有的api执行后返回值都是 新的promise实例, 只要是 promise实例就可以使用原型方法
- 静态方法:只能供Promise构造函数使用
原型方法
> 原型方法,通常是由,promise实例对象触发.
分类
- then 监听primise实例状态的变更, 主要监听变为已接收
- catch 监听promis实例 已拒绝的状态
- finally 监听链式调用中最后的一个状态
> 原型方法还可以链式调用,原型方法的callback 是异步执行的,属于微任务
**.then Callback**
- 1: 触发条件 当prmise状态变为 fulfilled
- 2: 形参来源 resolve函数实参 或者 上一个then return
.then Callback
1:所有prmie都变为 resolve
2:形参 数组, 数组元素 resove 实参.
静态方法
- Promise.all() 同时剪监听多个promise实例的状态变更,所有promise都变为 fullild (已接收) 执行 特all-then-callback,有一个拒绝执行catch-callback
- 我经常用于处理并发业务.例如,同时发送多个请求,等所有请求成功后,在处理.
- 经典的例子为:多张图片上传,之后同时发送
> Promise.all 捕获 reject 不是绝对的.如果单个prmise中;捕获了catch, Promise.all 不会捕获catch
~~~js
Promise.all()
参数:数组;数组元素是promise 实例
返回:新的prmise
~~~
- Promise.race() 监听多个promise实例状态,**第一个发生状态变更**的,如果是 fullid(已接收),执行 race-then-callback 如果是reject 执行race-catch-callback
- Prmise.any() 监听多个promise实例的状态, **只要有一个** 变为`fulfilled` (已接收) 执行 any-then-callback **全部reject**执行 any-catch-callback
- Promise.resolve() 相当于在 new Promise中执行 resolve
- Promise.reject() 相当于在 new Promise 执行 reject
promise 应用
> 只要是异步程序都可以使用promise. 例如 发送网略请求.
> 解决异步bug ,---> 异步问题同步化.
特点:
- 优点将传统的回调函数实现异步.变为 .then的链式调用
- 确定 then 可以一直执行, 并且也也没有提高太大的代码可读性