所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。Promise 提供统一的 API,各种异步操作都可以用同样的方法进行处理。
Promise有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。
Promise的状态不受外界影响。只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。
Promise的状态一旦状态改变,就不会再变。如果改变已经发生了,你再对Promise对象添加回调函数,也会立即得到这个结果。
Promise.all()方法用于将多个 Promise 实例,包装成一个新的 Promise 实例。
Promise.all()方法只适合所有异步操作都成功的情况,如果有一个操作失败,就无法满足要求。
const p = Promise.all([p1, p2, p3]);
只有p1、p2、p3的状态都变成fulfilled,p的状态才会变成fulfilled,此时p1、p2、p3的返回值组成一个数组,传递给p的回调函数。
只要p1、p2、p3之中有一个被rejected,p的状态就变成rejected,此时第一个被reject的实例的返回值,会传递给p的回调函数。
new Promise(function (resolve, reject) {
resolve('success1')
}).then(function (res) {
console.log(11, res)
return new Promise(function (resolve, reject) {
resolve('success2')
})
}).then(function (res) {
console.log(22, res)
return new Promise(function (resolve, reject) {
// resolve('success3')
reject('fail')
// 下面3 4都不会继续执行,promise的状态一旦确定,不在更改
// 即使下面再抛出reject,也不会执行,只会以第一个reject为主
})
}).then(function (res) {
console.log(33, res)
return new Promise(function (resolve, reject) {
resolve('success4')
})
}).then(function (res) {
console.log(44, res)
}).catch(function (error) {
console.log(error)
})