如何在 ES10 中处理多个 Promise 并行执行后返回的结果?

阅读时长 5 分钟读完

在前端开发当中,经常需要处理多个异步任务并行执行后返回的结果。针对这种情况,ES10 提供了一种更加优秀的处理方式,即 async/await 和 Promise.all 方法的结合使用。

async/await

async/await 是 ES7(ECMAScript 2017)中引入的一种处理异步代码的新方式,它可以通过更加清晰的语法实现同步的代码风格。

简单来说,通过 async 函数的定义使得函数返回一个 Promise 对象,而在 async 函数中使用 await 操作符可以暂停代码的执行,直到 Promise 对象返回结果。从而让像同步代码一样的方式可以处理异步的代码逻辑。

下面是一个使用 async/await 处理异步任务的示例代码:

-- -------------------- ---- -------
----- -------- --------- -
  ----- ---- - ----- ------------
  ------------------
-

-------- ----------- -
  ------ --- --------------- --
    ------------- -- ------------- --- ---- ----------- -----
  --
-

----------

在上面的示例代码中,fetchData 函数模拟异步获取数据的过程,在 example 函数中使用了 async/await 方式等待 fetchData 函数的执行结果,并将结果输出到控制台上。

Promise.all

ES6 中引入了 Promise 对象,通过 Promise.all 方法可以在多个 Promise 对象异步执行完成后统一处理返回结果。这个方法接收一个 Promise 数组作为参数,当 Promise 数组中的所有 Promise 对象均为 resolved 状态时,返回结果为一个包含所有 Promise 对象返回结果的数组。

下面是 Promise.all 方法的示例代码:

-- -------------------- ---- -------
----- ---------- - --- --------------- --
  ------------- -- -------------- --- ---- ----------- ------------- - -----
--

----- ---------- - --- --------------- --
  ------------- -- -------------- --- ---- ----------- ------------- - -----
--

----- ---------- - --- --------------- --
  ------------- -- -------------- --- ---- ----------- ------------- - -----
--

------------------------ ----------- ------------
  ---------- -- ------------------
  ------------ -- ----------------------

在上面的示例代码中,三个 Promise 对象 fetchData1、fetchData2 和 fetchData3 随机的模拟了异步获取数据的时间,Promise.all 方法将三个 Promise 对象作为参数传递,并在所有 Promise 对象返回结果后打印返回结果。

async/await 和 Promise.all 的结合使用

通过上面的两种方式,我们已经可以针对异步任务的执行和处理结果分别进行处理了。而在 ES10 中,我们可以将 async/await 和 Promise.all 两者的优点结合起来,更加优秀的处理多个异步任务的执行与结果处理。

下面是一个使用 async/await 和 Promise.all 结合使用的示例代码:

-- -------------------- ---- -------
----- -------- --------- -
  ----- ---------- - --- --------------- --
    ------------- -- -------------- --- ---- ----------- ------------- - -----
  --
  
  ----- ---------- - --- --------------- --
    ------------- -- -------------- --- ---- ----------- ------------- - -----
  --
  
  ----- ---------- - --- --------------- --
    ------------- -- -------------- --- ---- ----------- ------------- - -----
  --
  
  ----- ------- - ----- ------------------------ ----------- -------------
  ---------------------
-

----------

在上面的示例代码中,我们将三个异步获取数据的 Promise 对象 fetchData1、fetchData2 和 fetchData3 作为参数传递给 Promise.all 方法,得到一个包含所有结果的数组并将其赋值给 results 变量,最后将结果输出到控制台上。

总结

通过学习上面的示例代码,我们可以发现 async/await 和 Promise.all 的结合使用能够更加优秀地处理多个异步任务并行执行后的结果。通过这种方式,我们可以清晰地表达异步任务的代码逻辑,同时也能够更加灵活地处理异步任务的返回结果,在日常的前端开发当中是非常实用的技术手段。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/647d5a7d968c7c53b082af22

纠错
反馈