Skip to content

静态方法

Promise 在 JavaScript 中不仅提供了实例方法如 .then().catch() 来处理异步操作的结果,还提供了一些静态方法来简化某些异步编程模式。以下是几个常用的 Promise 静态方法:

1. Promise.resolve(value)

此方法返回一个以给定值解析的 Promise 对象。如果该值是一个 Promise,则直接返回这个 Promise;如果不是,则返回一个以该值为结果的新 Promise 对象。

javascript
let promise = Promise.resolve(42);
promise.then(function (value) {
  console.log(value); // 输出: 42
});

2. Promise.reject(reason)

此方法返回一个已经因给出的原因被拒绝的 Promise 对象。

javascript
let promise = Promise.reject(new Error("失败"));
promise.catch(function (error) {
  console.error(error.message); // 输出: 失败
});

3. Promise.all(iterable)

此方法返回一个新的 Promise,当传入的可迭代对象中的所有 Promise 都成功解决时,新 Promise 才会被解决,并将所有结果作为一个数组传递给回调函数。如果有任何一个 Promise 被拒绝,那么 Promise.all 返回的 Promise 也会立即被拒绝。

javascript
let p1 = Promise.resolve(1);
let p2 = Promise.resolve(2);
let p3 = Promise.resolve(3);

Promise.all([p1, p2, p3]).then(function (values) {
  console.log(values); // 输出: [1, 2, 3]
});

4. Promise.race(iterable)

此方法返回一个新的 Promise,一旦其中某个 Promise 被解决或拒绝,它就会采用最先被解决或拒绝的 Promise 的状态和值。

javascript
let p1 = new Promise((resolve) => setTimeout(resolve, 500, "one"));
let p2 = new Promise((resolve) => setTimeout(resolve, 100, "two"));

Promise.race([p1, p2]).then(function (value) {
  console.log(value); // 输出: "two"
});

5. Promise.allSettled(iterable) (ES2020)

此方法返回一个新的 Promise,当传入的可迭代对象中的所有 Promise 都已解决(无论是完成还是拒绝),新的 Promise 才会被解决。它不会像 Promise.all 那样在遇到第一个拒绝就提前拒绝,而是等待所有 Promise 完成,并返回每个 Promise 的结果(包括状态和值或原因)。

javascript
const promises = [
  Promise.resolve(1),
  Promise.reject("出错了"),
  Promise.resolve(3),
];

Promise.allSettled(promises).then((results) =>
  results.forEach((result) => console.log(result))
);
// 输出三个对象,分别表示每个 Promise 的状态(fulfilled 或 rejected)及其值或错误原因。

这些静态方法大大增强了 Promise 的功能,使得开发者可以更灵活地控制多个异步操作的组合方式。例如,Promise.all 可用于并行执行多个异步任务,而 Promise.race 则可用于实现超时机制等场景。

Released under the MIT License.