JavaScript ES9:异步迭代器

阅读时长 4 分钟读完

JavaScript ES9:异步迭代器

JavaScript ES9 异步迭代器是 ES6 迭代器和 ES7 异步迭代器的结合,它可以帮助我们在执行异步任务的过程中进行迭代。

异步迭代器可以帮助我们逐一地处理由异步操作模块返回的数据,并且可以在数据块的传输期间停止或恢复这个过程。这种迭代器的处理方式,使得它非常适合用于请求 REST API, 数据库,文件流等异步数据块。

为什么需要异步迭代器?

在以前的 JavaScript 版本中,我们往往要使用回调函数来执行异步操作。一般情况下,我们使用回调函数来获取执行异步操作之后的结果。例如,当我们从文件系统读取大型文件时,我们需要读取数据流,而不能一次性将所有数据读取到内存中。

异步迭代器目的是消除回调函数地狱(callback hell),这是由于在回调函数嵌套需要执行异步操作的时候,所造成的代码混乱问题。

例如,下面的代码展示了在 ES5 中从文件系统读取文件数据的方法:

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

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

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

异步操作很难保证在代码中的执行顺序,而现在,ES9 的异步迭代器可以帮助我们更好地解决这个问题。

如何使用异步迭代器?

ES9 中的迭代器和异步迭代器在语法上的主要区别是返回值。迭代器语法中的迭代器 next() 方法返回下一个值,而异步迭代器语法返回一个 Promise 对象,该对象在被解决前挂起执行并等待下一个值。

异步迭代器返回的 promise 可以被 await 关键字使用,并在 async 函数中进行处理。

让我们看一个从文件系统异步读取文件数据的例子:

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

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

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

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

在上述示例代码中,我们使用了 ES9 异步可迭代对象来异步读取文件中的数据块。然后在 for await 循环中使用 ES9 的异步迭代器来处理每个数据块,直到文件中的所有数据块被处理完为止。

在每个循环迭代中,我们使用 await 关键字来阻塞异步函数的执行直到当前值返回,并将返回的数据块打印到控制台上。

总结

ES9 中的异步迭代器使得在执行异步操作的过程中进行迭代更加的容易。在处理 REST API 和数据库查询之类的异步数据块时,它可以来逐块处理数据,使得我们能够更好地抽象控制流。如果你想更好地理解 JavaScript 异步迭代器的概念和用法,可以从上述示例代码开始进行学习,并通过实际实践来进一步深入掌握。

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

纠错
反馈