promise
promise基本用法
let p = new Promise(res=>{})
p.then()
Promise.all()
Promise.race();
Promise.resolve();
Promise.any()
只要面试官提到了promise 下面的内容全部说出来
1 promise程序执行的特点
- 1: new Promise中的回调函数是同步执行的
- 2: 原型方法的回调函数,都是异步执行的,属于异步消息队列中的微任务.
2 promise 有三种状态
- pending 进行中
- resolve / fulfilled 已接收
- reject 已拒绝
promise api 分类
- 原型api
- 静态api
- 所有的api执行后返回值都是新的promise实例; 只要是promise实例就可以使用原型方法
- 静态方法: 只能通过Promise构造函数使用
原型方法
原型方法,通常是由promise实例对象触发的
分类:
- then 监听promise 实例 已接受的状态
- catch 监听promise实例 已拒绝的状态
- finally 监听链式调用中最后一个状态
原型方法还是链式调用,原型方法的callback 是异步执行的,属于微任务
.then callback
- 1: 触发条件 当promise状态变为fulfilled
- 2: 形参来源resolve函数实参 或者 上一个then的 return
.catchcallback
- 1: 触发条件 当promise状态变为reject
- 2: 形参来源resolve函数实参 或者 上一个catch的 return
静态方法
-
Promise.all()
作用:解决同时执行多个异步任务,并发业务,等所有任务都成功后… 执行 thenCallback
参数:数组:数组元素 promise实例对象
返回值:新的 promise实例.then() 等任务中所有的promise 都是 已接受状态的时候触发。
注意:只要有一个拒绝状态;不会触发then 触发catch
Promise.all()
参数:数组;数组元素是promise实例
返回:新的promise
.thenCallback
1: 所有promise都变为resolve
2: 形参: 数组.数组元素 resolve
-
Promise.race()监听多个promise实力状态,第一个发生状态变更的,如果是fulfilled(已接收),执行 race-then-callback 如果是reject执行race-catch-callback
Promise.race()
多个任务中,第一个变更状态的,
如果是 resolve 执行 race-then-callback
如果是 reject 执行 race-catch-callback
注意:race只看第一个发生变更状态的
多个任务中第一个变更状态的 如果是resolve 执行then 如果是reject 执行 catch
多个promise实例任务中,只要有一个变为resolve执行 race-then-callback
所有的都是reject 执行catch -
Promise.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可以一直执行,并且也也没有提高太大的代码可读性