返回

Promise 的其他方法与特性

前端

Promise.resolve() 方法

Promise.resolve() 方法用于将一个值或一个 Promise 对象转换为一个新的 Promise 对象。如果传入的值是一个 Promise 对象,则返回这个 Promise 对象本身;如果传入的值是一个普通值,则返回一个新的 Promise 对象,该 Promise 对象的状态为 resolved,并且值为传入的值。

const promise1 = Promise.resolve(42);
promise1.then(value => {
  console.log(value); // 输出:42
});

const promise2 = Promise.resolve(Promise.resolve(43));
promise2.then(value => {
  console.log(value); // 输出:43
});

Promise.race() 方法

Promise.race() 方法用于将多个 Promise 对象包装成一个新的 Promise 对象。这个新的 Promise 对象的状态取决于传入的 Promise 对象中最先完成的 Promise 对象的状态。如果传入的 Promise 对象都失败,则新的 Promise 对象的状态也为失败。

const promise1 = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve(42);
  }, 1000);
});

const promise2 = new Promise((resolve, reject) => {
  setTimeout(() => {
    reject('Error');
  }, 2000);
});

Promise.race([promise1, promise2]).then(value => {
  console.log(value); // 输出:42
}).catch(error => {
  console.log(error); // 不会执行
});

Promise.all() 方法

Promise.all() 方法用于将多个 Promise 对象包装成一个新的 Promise 对象。这个新的 Promise 对象的状态取决于传入的 Promise 对象的所有状态。只有当传入的 Promise 对象都成功完成时,新的 Promise 对象的状态才为成功;否则,新的 Promise 对象的状态为失败。

const promise1 = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve(42);
  }, 1000);
});

const promise2 = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('Hello');
  }, 2000);
});

Promise.all([promise1, promise2]).then(values => {
  console.log(values); // 输出:[42, 'Hello']
}).catch(error => {
  console.log(error); // 不会执行
});

Promise.finally() 方法

Promise.finally() 方法用于在 Promise 对象完成(无论成功还是失败)后执行指定的回调函数。这个回调函数不接收任何参数,也不返回任何值。

const promise = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve(42);
  }, 1000);
});

promise.finally(() => {
  console.log('Promise completed');
}).then(value => {
  console.log(value); // 输出:42
});

Promise.allSettled() 方法

Promise.allSettled() 方法用于将多个 Promise 对象包装成一个新的 Promise 对象。这个新的 Promise 对象的状态始终为成功,并且其值是一个数组,其中包含传入的 Promise 对象的所有状态。

const promise1 = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve(42);
  }, 1000);
});

const promise2 = new Promise((resolve, reject) => {
  setTimeout(() => {
    reject('Error');
  }, 2000);
});

Promise.allSettled([promise1, promise2]).then(results => {
  console.log(results); // 输出:[
    { status: 'fulfilled', value: 42 },
    { status: 'rejected', reason: 'Error' }
  ]
});