ES12 中的 ECMAScript 之聚焦 Promise 优化浅谈

在开发过程中,我们经常会遇到需要异步处理的情况。在 JavaScript 中,Promise 已经成为了处理异步的一种常见方式。ES12 中也对 Promise 进行了优化,本文将着重探讨ES12中的 Promise 优化。

ES12 对 Promise 的优化

1. allSettled

在 ES12 之前,Promise.all 在其中一个 Promise 被拒绝时就会终止执行并拒绝整个承诺。但是,ES12 提供了一个新特性 allSettled,使得在所有承诺都解决后,该方法不会被弃用并返回一个解决状态数组,该数组是一个(promiseful)由所有输入实例决议对象而创建的一组对象。

示例代码:

const promise1 = Promise.resolve(1);
const promise2 = Promise.reject(new Error('rejected'));
const promise3 = Promise.resolve(3);

Promise.allSettled([promise1, promise2, promise3])
  .then(results => console.log(results))
  .catch(error => console.error(error));

输出:

2. any

ES12 中引入了 any 方法,意味着在一组 Promise 中找到最快解决的 Promise 解决方案。如果传递给 any 的所有 Promise 都拒绝了,则它将返回一个 AggregateError,其中包含来自所有拒绝 Promise 的信息。

示例代码:

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

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

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

Promise.any([promise1, promise2, promise3])
  .then(result => console.log(result))
  .catch(error => console.error(error));

输出:

3. try

Promise.try 是一个新的方法,用于调用 Promise 构造函数或 Promise 工厂函数。它负责确保您的代码在 Promise 的范围内执行,而不需要显式地构造 Promise。

示例代码:

Promise.try(() => {
  console.log('Promise.try: start');
  return Promise.resolve('Promise.try: completed successfully');
}).then(result => console.log(result));

输出:

总结

ES12 对于 Promise 的优化让我们在异步处理方面有了更加方便的处理能力。通过 allSettled 方法,我们可以同时解决多个承诺,而 any 方法则使我们可以更快地找到解决方案。另外,try 方法也能让我们不需要显式构造 Promise 即可使用它。

希望这篇文章能够帮助大家更好的学习 ES12 中的 Promise。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65a33d96add4f0e0ffb59fc4


纠错反馈