ECMAScript 2021 中的新特性:Promise.allSettled 和 globalThis
ECMAScript 2021(简称 ES2021)是 JavaScript 的最新版本,其中包含了许多新的特性和语法,这些特性将有助于提高 JavaScript 的开发效率和代码质量。本文将介绍其中两个新特性:Promise.allSettled 和 globalThis。
Promise.allSettled
在以往的版本中,Promise.all 方法只能返回一个成功的 Promise 或者抛出一个错误。如果 Promise.all 中有一个 Promise 被拒绝,则整个 Promise.all 将被拒绝,并且 Promise.all 只会返回一个失败的 Promise。这使得 Promise.all 并不适用于开发者需要处理所有 Promise 结果的情况。
ES2021 引入了 Promise.allSettled 方法,该方法将返回一个 Promise,该 Promise 在所有 Promise 完成后被解决,并且包含一个 status 字符串的数组,该数组描述了每个 Promise 的状态。数组中每个对象都有以下属性。
- status:表示 Promise 的状态,可能的取值为 "fulfilled" 或 "rejected"。
- value(仅 status 为 "fulfilled" 时存在):表示 Promise 解决时的返回值。
- reason(仅 status 为 "rejected" 时存在):表示 Promise 被拒绝时的原因。
下面是使用 Promise.allSettled 的示例代码。
const promises = [ Promise.resolve('foo'), Promise.reject('bar'), Promise.resolve('baz') ]; Promise.allSettled(promises) .then(results => results.forEach(result => console.log(result)));
运行结果如下所示。
{ status: "fulfilled", value: "foo" } { status: "rejected", reason: "bar" } { status: "fulfilled", value: "baz" }
globalThis
在以往的版本中,我们通常使用不同的方式引用全局对象。在浏览器中,我们可以使用 window,而在 Node.js 中,我们可以使用 global。在某些情况下,如果我们需要在不同的环境中编写可移植的代码,这是非常麻烦的。
ES2021 引入了 globalThis,它提供了一种跨平台的方式来引用全局对象。globalThis 可以在任何环境下使用,并始终指向全局对象。
下面是使用 globalThis 的示例代码。
console.log(globalThis);
运行结果如下所示。
Window {...} // 在浏览器环境下 global {...} // 在 Node.js 环境下
结论
ES2021 引入了一些非常实用的新特性,它们将为用户在开发过程中带来更大的灵活性和高效性。Promise.allSettled 将有助于处理所有 Promises 结果,而 globalThis 将有助于编写可移植的代码。快来使用这些新功能提高你的开发效率吧!
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/674d06d5a336082f2547bbbc