Promise
new Promise((resolve, reject) => {
resolve() // 成功
// reject() // 失败
})
Promise有三种状态
pending[待定] 初始状态fulfilled[实现] 操作成功rejected[被否决] 操作失败
resolve 将Promise状态从pending变成fulfilled
rejected 将Promise状态从pending变成rejected
一旦状态改变, 就不会再修改
Promise.then(success => {}, err => {}) 参数为两个回调函数, 第一个成功时触发, 第二个失败时触发
Promise.finally(() => {}) 该方法回调内没有参数, 无论resovel还是rejected都会执行, 因此finally方法里面的操作,应该是与状态无关的,不依赖于 Promise 的执行结果。
Promise链式调用
Promise.then()返回一个Promise, 所以可以使用.then().then()...的链式调用, 但是当第一个then有异步操作, 就无法保证和之后的then中内容的执行顺序,例如:
function delay (t) {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log(t, 'ms后打印')
resolve()
}, t);
})
}
delay(100)
.then(() => {
delay(2000)
}).then(() => {
delay(300)
})
// 结果
// 100 ms后打印
// 300 ms后打印
// 2000 ms后打印
当.then()内的回调函数返回Promise时, 会等待Promise结束后再执行下一个then, 例如:
function delay (t) {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log(t, 'ms后打印')
resolve()
}, t);
})
}
delay(100).then(() => {
return delay(2000)
}).then(() => {
delay(300)
})
// 结果
// 100 ms后打印
// 2000 ms后打印
// 300 ms后打印
Promise静态方法
Promise.all([])参数:Promise数组, 数组内的Promise全部完成该Promise完成Promise.race([])同上, 有一个完成就算完成