Promise
定义:
在MDN中对Promise的定义是,用于表示一个异步操作的最终完成 (或失败), 及其结果值。
三种状态:
- pending(进行中):初始状态
- resolved(已完成):操作成功,也叫作fulfilled
- rejected(已失败): 操作失败
缺点:
- 一旦创建无法中途取消
- 处于pending状态时,无法获取当前的执行进度
- 如果没有设置回调函数,内部的报的错误无法反应到外部
创建Promise:
- 构造函数创建
const testPromise = new Promise(function(resolve, reject) {
setTimeout(() => {
resolve("操作成功")
})
})
testPromise.then((response) => {
console.log(response) // 打印操作成功
}, () => { // 失败回调
})
- Promise.resolve()和Promise.reject()
这两个方法可以将一个对象直接转换成Promise对象
const testPromise = Promise.resolve('hello Promise')
testPromise.then(response => {
console.log(response) // 打印 hello Promise
})
上述方法生产一个新的Promise对象,该对象的状态是resolved,所以它会立刻执行回调函数。同理Promise.reject()方法创建出来的对象状态是rejected,会立刻实行onRejected的回调
- Promise.all()
该方法用于将多个Promise对象封装成一个新的Promise实例
const testPromise = Promise.all([p1,p2,p3])
在上述方法中,Promise.all接受一个数组作为参数且数据中的成员都是promises实例(p1,p2,p3都是Promise实例)。testPromise状态由p1、p2、p3共同决定,主要有一下两种情况:
1、只有p1、p2、p3的状态都变成fulfilled,p的状态才会变成fulfilled,此时p1、p2、p3的返回值组成一个数组,传递给p的回调函数。
2、只要p1、p2、p3之中有一个被rejected,p的状态就变成rejected,此时第一个被reject的实例的返回值,会传递给p的回调函数。
Promise.race与Promise.all的却别是,只要p1、p2、p3之中有一个实例先改变状态,p的状态就跟着改变,那个先改变的Promise实例的返回值,就传递给p的返回值。