Skip to content

promise总结

更新时间: 3/6/2022字数: 0 字

Promise 对象表示异步操作最终的完成(或失败)的结果值。

  1. Promise.resolve()

    参数:可迭代对象。返回值:一个 promise

    将值转为 Promise 对象。

  2. Promise.reject()

    参数:可迭代对象。返回值:一个 promise

    返回一个已拒绝(rejected)的 Promise 对象,拒绝原因为给定的参数。

  3. Promise.all()

    参数:可迭代对象。返回值:一个 promise

    一个 promise 失败,返回的失败的 Promise,并带有第一个被拒绝的原因。

    全部成功,返回所有成功结果的数组。

  4. Promise.any()

    参数:可迭代对象。返回值:一个 promise

    一个 promise 成功,返回的成功的 Promise ,带有成功的原因。

    全部失败,返回所有失败原因的数组

  5. Promise.race()

    参数:可迭代对象。返回值:一个 promise

    返回第一个成功或者失败的结果值。

    不管是成功还是失败。

  6. Promise.allSettled()

    参数:可迭代对象。返回值:一个 promise

    全部完成(不管是成功还是失败)后,然后以一个数组的形式返回每个 Promise 的结果对象。

    使用场景:

    • 并行任务处理:当你需要同时发起多个异步操作,并且希望知道所有操作的结果(不论成功还是失败),而不是在任何一个操作失败时就停止。
  7. Promise.withResolvers()

    创建一个带有解决器和拒绝器的 Promise

    ts
    // 创建一个带有解决器和拒绝器的 Promise
    const { promise, resolve, reject } = createPromiseWithResolvers();
    
    // 可以在异步操作成功时调用 resolve
    setTimeout(() => {
        if (/* 某些条件满足 */) {
            resolve('操作成功');
        } else {
            // 或者在失败时调用 reject
            reject('操作失败');
        }
    }, 2000);
    
    promise.then(data => {
        console.log('成功:', data);
    }).catch(error => {
        console.error('失败:', error);
    });

相关问题

手写 promise.all()

ts
const promiseAll = (promiseArr) => {
  return new Promise((resolve, reject) => {
    const result = []
    let successCount = 0
    promiseArr.forEach((item, index) => {
      Promise.resolve(item)
        .then((res) => {
          successCount++
          result[index] = res
          if (successCount === promiseArr.length) {
            resolve(result)
          }
        })
        .catch((err) => {
          reject(err)
        })
    })
  })
}

promiseAll([Promise.resolve(1), Promise.reject(2), Promise.resolve(3)]).then(
  (res) => {
    console.log('res', res)
  }
)

Released under the MIT License.