随着前端技术的发展,异步编程已成为前端开发中不可避免的部分,而 Promise 是异步编程中常见的解决方案之一。ES8(也称为 ECMAScript 2017)引入了 async/await 这一语言特性,可以方便地处理异步代码。
本文将介绍如何利用 ES8 的 async/await 实现多个 promise 同时并发执行。
什么是 async/await
async/await 是 ES8 中新增的异步编程语法糖,简化了异步代码的编写,并让代码更易读易写。
async 函数定义一个异步函数,函数返回一个 Promise 对象。在 async 函数内部,可使用 await 关键字等待一个异步操作的结果,await 关键字只能在 async 函数内部使用。
下面是一个例子:
async function fetchData() { const result = await fetch('https://api.example.com/data'); const data = await result.json(); return data; }
如何利用 async/await 实现多个 promise 同时并发执行
假设有多个异步任务需要执行,可以使用 Promise.all() 一起执行,但是这种方式有个缺点,即需要等待所有任务完成后才执行下一步操作。如果只关心最终结果,而不关心任务之间的执行顺序,则此方式不如异步地处理结果来得有效率。
幸运的是,async/await 的语法允许我们同时异步地执行 promise,这样可以节省时间并提高效率。
实现方式如下:
// javascriptcn.com 代码示例 async function request(urls) { const results = await Promise.all( // 使用 map() 将 urls 数组中的每个 URL 转换为 Promise 对象 urls.map(async url => { const response = await fetch(url); const result = await response.json(); return result; }) ); return results; }
在此示例中,我们将多个 URL 导入到 request 函数中,并使用 Array.map() 将它们全部转换为 Promise对象,然后在 Promise.all() 内执行,将所有 Promise 对象的结果组合成一个新的数组。
另外,函数甚至可以同时并发执行包含不同功能的 promise,因为 await 关键字阻塞当前函数执行,而不是阻塞整个应用程序。
总结
使用 async/await 来处理多个 promise 可以提高效率,并使代码更加易读易写。在将多个 promise 并发执行时,代码风格要优于使用 Promise.all() 阻塞等待,如果不关心任务之间的执行顺序,则并发执行会提高应用程序的效率。
代码风格清晰简单,可被任何人理解。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/653a864f7d4982a6eb497727