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([])
同上, 有一个完成就算完成