ES2021 中的消息通道 API 和更多

随着 JavaScript 的不断发展,我们已经进入了 ES2021 时间。在这个版本中引入了许多新特性,包括新的消息通道 API,该 API 为前端开发者提供了更好的隔离和安全性。

消息通道 API

所谓消息通道,实际上就是两个 JavaScript 环境之间的通信管道。每个消息通道都有发送端和接收端,可以通过它们传输数据。消息通道 API 让我们可以在两个独立的 JavaScript 环境之间创建一个消息通道,并通过该通道传输数据。这样我们就可以在 Web Worker,iFrame 和主线程之间安全地交换数据。

下面是使用消息通道 API 的示例代码:

-- --------
----- ------- - --- -----------------

-- - --- ------ -
----------------------- - ------- -- -
  ------------------------
  -- ------
  ------------------------------ ------
--

-- -----
-- ------ --- ------ ---------
-------------------------------- ---- --------
-- ---- --- ------ -----
----------------------- - ------- -- -
  ------------------------
--

该示例中,我们使用 MessageChannel 类创建了一个消息通道,并将其端口( channel.port1channel.port2) 分别传递给了两个独立的 JavaScript 环境。然后我们可以在这些 JavaScript 环境之间传输数据,例如,我们在主线程内携带一个消息发送到另一个环境内,再在那里获取消息并作出响应,最后,在那里将响应返回主线程。

数字分隔符

在 ES2021 中还引入了一个新的数字分隔符特性。数字分隔符可以用来在数字字面量中方便地添加下划线,以提高可读性。例如:

--- ------ - -------- -- -------
--- --------------- - ---------- -- -------

在这个例子中,我们可以看出,通过使用下划线将数字“1000000”分隔成了更可读的“1_000_000”。

Promise.allSettled

ES6 在 JavaScript 中引入了 Promise,它本质上是一个表示异步操作结果的对象。在 ES2020 中,引入了一个新的 Promise.allSettled 方法来处理并行异步操作,并在它们都完成后返回结果。在 ES2021 中,这个方法得到了改进,现在它不仅能够返回已经解决的 Promise,还能返回拒绝的 Promise。这个新的改进可以让我们快速处理丢失的异步调用。下面是一个例子:

--- -------- - -
  -------------------------
  ---------------------------
  ------------------------
--

------------------------------------------- -- -
  ---------------------
---

在这个例子中,我们创建了一个包含多个 Promise 的数组,并使用 Promise.allSettled 方法并行解决这些 Promise。最终的结果是一个具有每个 Promise 解决状态的对象数组,类似于这样:

-
  -------- ------------ ------ ---------
  -------- ----------- ------- ------------
  -------- ------------ ------ --------
-

结论

ES2021 中引入了许多有趣的特性和改进,其中最重要的是消息通道 API。这个新的 API 使得前端开发人员能够更加方便,安全地在各个 JavaScript 环境之间传输数据。另外还有数字分隔符和 Promise.allSettled 特性,提高了代码的可读性和方便处理成批的异步调用。如果想要更好地掌握 JavaScript,我们应该了解并掌握这些新技术。

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