在 ES8 中使用终止迭代

阅读时长 5 分钟读完

在 ES8 中使用终止迭代

在前端开发中,经常需要对数据进行遍历和操作。在 JavaScript 中,我们可以使用 for 循环、forEach() 方法等方式来完成遍历操作。然而,如果需要中途终止循环,我们该如何做呢?

在 ES8 中,引入了一个新特性:终止迭代。它可以帮助我们在遍历数据时,在某个条件满足时中止循环,从而提高代码效率和性能。

如何使用终止迭代?

在 ES8 中,使用终止迭代有两种方式:for-await-of 和 .finally()。下面我们将分别来介绍它们的实现和用法。

  1. for-await-of

for-await-of 是 ES8 中新增的一个循环语法,它可以遍历任何具有 Symbol.asyncIterator 方法的对象。

现在让我们看一个例子:

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

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

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

输出结果:

从上面的代码中,我们可以看到 for-await-of 循环语法需要使用 async/await 方法去处理,我们创建了一个名为 asyncIterable 的对象,其中定义了一个 [Symbol.asyncIterator] 方法来返回一个 async generator 函数。

在循环过程中,我们使用了 const value 来接收循环出来的值,然后通过 console.log() 打印出来。

现在,如果在循环过程中我们想要中止迭代,只需要在循环体内抛出一个错误即可。例如,我们可以修改上面的例子:

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

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

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

输出结果:

从上面的代码中,我们可以看到:当 value 的值为 async 时,我们抛出了一个错误,从而停止了迭代。此时,我们可以通过 catch() 方法来捕获抛出的错误并做出相应的处理。

  1. .finally()

.finally() 是 ES8 中新增的一个 Promise 方法,它会在 Promise 状态为 resolved 或 rejected 后,无论如何都会被调用。我们可以通过在 Promise 链中添加 .finally() 方法来进行数据处理或资源释放等操作。

下面是一个使用 .finally() 的例子:

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

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

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

输出结果:

从上面的代码中,我们可以看到:在 Promise 的 then() 方法中,我们通过 throw new Error() 方法抛出了一个错误。此时,catch() 方法会捕获到此错误并进行操作,最后 .finally() 方法始终都会被执行。

总结

在 ES8 中,我们可以使用 for-await-of 和 .finally() 两种方式来实现终止迭代。通过这两种方式,我们可以在数据遍历过程中,在某个条件满足时中止循环,提高代码效率和性能。

示例代码已经在上面展示了,读者可以尝试自己编写代码来体验这两种方式的优势。

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

纠错
反馈