Promise 的状态有哪些?常用方法有哪些?

三种状态

状态一旦改变就不可逆: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。

同分类其他题目