前言
在现代的 JavaScript 开发中,async/await 已经成为了异步编程的主流方式。在 ECMAScript 2019 中,await 命令也得到了一些改进,使得它更加简洁和易于使用。本文将介绍这些改进,以及如何在实际开发中使用它们。
理解 await 命令
在 JavaScript 中,异步编程是非常常见的。在某些情况下,我们需要等待异步操作完成后才能继续执行后续代码。这时,我们就需要使用 await 命令。
await 命令可以让 JavaScript 引擎等待一个异步操作完成,然后再继续执行后续代码。它通常与 async 函数一起使用,例如:
-- -------------------- ---- ------- ----- -------- --------- - ----- ------ - ----- -------------------------------------- ----- ---- - ----- -------------- ------ ----- - ------------------- -- - ------------------ ---
在上面的代码中,fetch 函数返回一个 Promise 对象,它表示异步操作的结果。我们使用 await 命令等待 fetch 函数返回的 Promise 对象,然后再使用 await 命令等待 result 对象的 json 方法返回的 Promise 对象。最后,我们返回获取到的数据。
ECMAScript 2019 中的改进
在 ECMAScript 2019 中,await 命令得到了一些改进,使得它更加简洁和易于使用。
异步迭代器
在以前的版本中,我们只能使用 for...of 循环来迭代同步可迭代对象。在 ECMAScript 2018 中,我们可以使用 for await...of 循环来迭代异步可迭代对象。在 ECMAScript 2019 中,我们可以直接使用 await 命令来获取异步可迭代对象的下一个值。例如:
-- -------------------- ---- ------- ----- -------- --------- - ----- -------- - ----- -------------------------------------- ----- ------ - -------------------------- ----- ------ - ----- - ----- ----- - - ----- -------------- -- ------ ------ ------------------- - -
在上面的代码中,我们使用 await 命令来获取 response.body.getReader() 返回的异步可迭代对象的下一个值。我们可以直接使用 value 属性来获取这个值。
Promise.allSettled
在以前的版本中,我们只能使用 Promise.all 方法来等待多个 Promise 对象全部完成。在 ECMAScript 2019 中,我们可以使用 Promise.allSettled 方法来等待多个 Promise 对象全部完成,并返回它们的结果。例如:
const promises = [ Promise.resolve(1), Promise.reject(new Error('error')), Promise.resolve(3) ]; Promise.allSettled(promises).then(results => { console.log(results); });
在上面的代码中,我们使用 Promise.allSettled 方法来等待三个 Promise 对象全部完成。即使其中一个 Promise 对象失败了,Promise.allSettled 方法仍然会等待所有的 Promise 对象全部完成,并返回它们的结果。
如何使用 await 的改进
在实际开发中,我们可以使用 await 命令的改进来使我们的代码更加简洁和易于理解。例如:
使用 for await...of 循环
在处理异步可迭代对象时,我们可以使用 for await...of 循环来替代 while 循环。例如:
async function getData() { const response = await fetch('https://api.example.com/data'); const reader = response.body.getReader(); for await (const { done, value } of reader) { if (done) break; console.log(value); } }
在上面的代码中,我们使用 for await...of 循环来迭代 response.body.getReader() 返回的异步可迭代对象。我们可以直接使用 value 属性来获取这个值。
使用 Promise.allSettled 方法
在处理多个 Promise 对象时,我们可以使用 Promise.allSettled 方法来等待它们全部完成,并返回它们的结果。例如:
async function getData() { const [result1, result2, result3] = await Promise.allSettled([ fetch('https://api.example.com/data1'), fetch('https://api.example.com/data2'), fetch('https://api.example.com/data3') ]); console.log(result1, result2, result3); }
在上面的代码中,我们使用 Promise.allSettled 方法来等待三个 Promise 对象全部完成,并返回它们的结果。即使其中一个 Promise 对象失败了,Promise.allSettled 方法仍然会等待所有的 Promise 对象全部完成,并返回它们的结果。
结论
在 ECMAScript 2019 中,await 命令得到了一些改进,使得它更加简洁和易于使用。我们可以使用这些改进来使我们的代码更加简洁和易于理解。在实际开发中,我们应该充分利用这些改进,提高我们的开发效率。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/674181c6ed0ec550d720176a