Promise 的状态有哪些?常用方法有哪些?
三种状态
- pending(等待中)→ 初始状态
- fulfilled(已成功)→
resolve()触发 - rejected(已失败)→
reject()触发
状态一旦改变就不可逆:pending → fulfilled 或 pending → rejected
实例方法
promise
.then((result) => {}) // 成功回调
.catch((error) => {}) // 失败回调
.finally(() => {}) // 无论成功失败都执行静态方法
| 方法 | 说明 |
|---|---|
Promise.resolve(value) |
返回已成功的 Promise |
Promise.reject(reason) |
返回已失败的 Promise |
Promise.all([...]) |
全部成功才成功,一个失败即失败 |
Promise.allSettled([...]) |
等待全部完成,返回每个结果 |
Promise.race([...]) |
返回第一个完成的(无论成功/失败) |
Promise.any([...]) |
返回第一个成功的 |
// all:全部成功
Promise.all([fetchA(), fetchB()])
.then(([a, b]) => console.log(a, b))
.catch(err => console.log('任一失败'))
// allSettled:等待全部完成
Promise.allSettled([fetchA(), fetchB()])
.then(results => {
results.forEach(r => {
console.log(r.status) // 'fulfilled' 或 'rejected'
})
})
// race:第一个完成
Promise.race([
fetch(url),
new Promise((_, reject) => setTimeout(() => reject('timeout'), 5000))
])
// any:第一个成功
Promise.any([fetchA(), fetchB(), fetchC()])
.then(first => console.log('第一个成功:', first))链式调用
Promise.resolve(1)
.then(v => v + 1) // 2
.then(v => Promise.resolve(v + 1)) // 3(支持返回 Promise)
.then(v => console.log(v)) // 3注意:
.then返回的值会被Promise.resolve()包装,所以可以返回普通值或 Promise。