ES9(也称为 ES2018)是 ECMAScript 标准的第 9 版本,于 2018 年 6 月发布。虽然它没有像 ES6 那样带来太多令人兴奋的新功能,但它仍然添加了一些有用的特性,为前端开发人员提供了更好的工具。在本篇文章中,我们将探讨几个新增的特性,包括 for-await、Promise.prototype.finally() 等等。
for-await 循环
for-await 循环是 ES9 中最受欢迎的特性之一。它类似于 for-of 循环,但是适用于异步迭代器。异步迭代器是一个可迭代对象,其返回一个 Promise 对象,该 Promise 对象解析为 cursor.next()
返回的值。for-await 循环的工作原理类似于 async/await,但是对于同步和异步迭代器都有效。
下面是一个简单的示例,演示了如何使用 for-await 循环遍历异步生成器:
// javascriptcn.com 代码示例 async function* asyncGenerator() { yield Promise.resolve(1); yield Promise.resolve(2); yield Promise.resolve(3); } async function test() { for await (let value of asyncGenerator()) { console.log(value); } } test(); // Output: 1 2 3
该示例定义了一个返回 Promise 对象的异步生成器。然后,我们使用 for-await 循环遍历生成器的值。由于异步生成器是异步的,因此 for-await 循环等待 Promise 对象的解析,并输出它们的值。
Promise.prototype.finally()
ES9 引入了 Promise.prototype.finally() 方法,它在 Promise 完成时执行回调函数。无论 Promise 对象最终是解决还是拒绝,该回调函数都会被调用。此方法可以用于清理资源或在 Promise 执行完成时执行某些操作。
下面是一个使用 Promise.prototype.finally() 的示例:
// javascriptcn.com 代码示例 Promise.resolve(1) .then((result) => { console.log('The result is ' + result); return result + 1; }) .catch((err) => console.log('Oops, there was an error: ' + err)) .finally(() => console.log('Done')); // Output: The result is 1 // Done
在这个示例中,我们创建了一个 Promise 并调用了它的 resolve() 方法。我们使用 .then() 处理程序处理 Promise 的结果, .catch() 处理程序处理错误。最后,我们使用 .finally() 处理程序,在 Promise 完成时执行一些操作。在这种情况下,它只是输出 Done。
其他新增特性
除了 for-await 循环和 Promise.prototype.finally() 之外,ES9 还有其他一些值得注意的新增特性:
- 标准库中,Object.entries() 和 Object.values() 现在支持原始值和对象。
- 正则表达式现在支持 Unicode 属性转义。
- 正则表达式现在支持命名捕获组。
- Spread 语法现在支持 Object。
总结
ES9 带来了一些有用的特性,这些特性将使前端开发人员更易于开发现代应用程序。for-await 循环和 Promise.prototype.finally() 特别有用,它们使异步编程更加容易和优雅。我们建议在你的项目中使用它们,并保持更新,以便知道其他有用的功能和改进。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/652ea8cb7d4982a6ebfb7869