在 ES8 中,异步函数带给我们 Promise 的实现,现在在 ES9 中,异步生成器将带给我们更多的异步编程解决方案。同时,ES9 还增加了一种新类型的对象,称为虚拟对象。在本文中,我们将深入了解这两种新功能的细节和学习指导。
异步生成器
异步生成器是一种新的函数类型,它是生成器函数的异步版本。生成器函数通过使用 yield 运算符来实现迭代器。异步生成器函数则使用 yield* 运算符来委托它们的控制权。
以下是一个简单的例子说明它的用法:
-- -------------------- ---- ------- ----- --------- ------------------ - --- - - -- ----- -- - -- - ----- --- --------------- -- ------------------- ------- ----- ---- - - ----- -------- - ------------------- ----- ------ - ----- ---------------- -- ----- - ------ -- ----- ----- -
与生成器函数类似,异步生成器函数通过使用 yield 运算符来暂停函数执行。但是,当使用 yield* 运算符委托控制权时,委托的异步生成器的 yield 值将被解析为 Promise,并返回 resolve 的值。这就使得异步和等待更多时间的情况更加容易。
虚拟对象
虚拟对象在 JavaScript 中是新的对象类型,它不是 JavaScript 的值,而是在运行时创建的对象。虚拟对象的目的是给开发者提供一种方式来表示 JavaScript 实现内部的对象,例如 WeakMap 或 Set。
以下是一个简单的例子说明它的用法:
const myMap = new WeakMap(); const myObject = { value: "Hello World" }; myMap.set(myObject, 42); const myVirtualObject = Object.setPrototypeOf({}, myObject); console.log(myVirtualObject.value, myMap.get(myVirtualObject)); // 输出 Hello World 42
可见,虚拟对象看起来像普通的 JavaScript 对象,但是由 Object.setPrototypeOf() 创建。虚拟对象可以用于多种情况,例如模拟 DOM 元素或测试 JavaScript 引擎的垃圾回收程序。
学习和指导
在掌握了异步和迭代器的知识后,理解异步生成器应该不会太难。用它来等待和迭代异步操作会帮助您创建更加简洁和可读的自定义异步 API,同时减少回调地狱。虚拟对象则给了开发者一个十分灵活的方式来自定义 JavaScript 的内部对象,并且也能够用于复杂的测试场景。
但是,请注意,这两种新功能的支持仍不是非常广泛。许多浏览器仍不支持它们,所以在使用它们时应该小心,并考虑使用转译器比如 Babel 来使它们的使用更稳定和兼容。
结论
在 ES9 中,我们看到了异步生成器和虚拟对象的出现。这两个新功能都为异步编程和对象创建提供了新的方法。异步生成器可以帮助我们创建更加简洁和可读的自定义异步 API,虚拟对象则给我们提供了新的方法来自定义 JavaScript 的内部对象。请记住,尽管这两种新功能很有利,但在使用它们时,我们应该考虑到浏览器的兼容性问题。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6770a7d7e9a7045d0d7f7ab5