ECMAScript 2018(简称ES9)是 JavaScript 的最新版本,于2018年6月发布。它包含了许多新特性和改进,其中最值得关注的是并发和异步循环。
并发
并发是指在同一时间内执行多个任务的能力。在ES9中,引入了两个新的API来支持并发执行:Promise.allSettled
和for await...of
。
Promise.allSettled
Promise.allSettled
接收一个Promise数组,返回一个新的Promise,当所有的Promise都已经完成或被拒绝后,它将返回一个包含每个Promise结果的数组。不同于Promise.all
,Promise.allSettled
不会在任何一个Promise被拒绝时中止执行。
下面是一个例子:
const promises = [ Promise.resolve('foo'), Promise.reject('bar'), Promise.resolve('baz') ]; Promise.allSettled(promises) .then(results => console.log(results));
输出结果:
[ { status: 'fulfilled', value: 'foo' }, { status: 'rejected', reason: 'bar' }, { status: 'fulfilled', value: 'baz' } ]
for await...of
for await...of
是一个新的异步迭代器,可以用于遍历异步生成器(AsyncGenerator)或其他可迭代的异步对象。它可以使异步代码更加简洁和易读。
下面是一个例子:
-- -------------------- ---- ------- ----- --------- ---------------- - ----- -- ----- -- ----- -- - ----- -------- ----- - --- ----- ---- --- -- ----------------- - ----------------- - - ------
输出结果:
1 2 3
异步循环
异步循环是指在循环中等待异步操作完成后再继续执行下一次循环。在ES9中,引入了async
和await
关键字来支持异步循环。
async/await
async/await
是一种基于Promise的异步编程模型,它可以使异步代码更加简单和易读。async
关键字用于定义一个异步函数,await
关键字用于等待一个Promise的完成。
下面是一个例子:
async function foo() { const result1 = await Promise.resolve('foo'); const result2 = await Promise.resolve('bar'); console.log(result1, result2); } foo();
输出结果:
foo bar
并发执行
虽然async/await
可以让异步代码更加简单和易读,但是它仍然是顺序执行的。如果我们需要并发执行多个异步操作,可以使用Promise.all
来实现。
下面是一个例子:
-- -------------------- ---- ------- ----- -------- ----- - ----- --------- -------- - ----- ------------- ----------------------- ---------------------- --- -------------------- --------- - ------
输出结果:
foo bar
结论
ECMAScript 2018(ES9)引入了许多新的特性和改进,其中最值得关注的是并发和异步循环。Promise.allSettled
和for await...of
支持并发执行,async/await
和Promise.all
支持异步循环。这些新特性可以使JavaScript更加强大和灵活,也可以使我们的异步代码更加简单和易读。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6763c783856ee0c1d4227a48