在 ECMAScript 9 中,推出了一个新的语法 for await...of,用于处理异步的迭代器。它可以用于遍历异步可迭代对象,操作异步生成器函数,以及同时进行多个异步操作等。在本文中,我们将介绍 for await...of 循环的使用方法,并提供一些示例代码,以展示它的深度和指导意义。
基本用法
for await...of 循环的格式与普通的 for...of 循环非常相似,只不过在前面加了一个 await 关键字。它有一个异步可迭代对象作为循环体,而异步可迭代对象通常是一个迭代器或一个带有异步 next() 方法的对象。用法如下:
async function processAsyncIterable(asyncIterable) { for await (const item of asyncIterable) { console.log(item); } }
上面的代码声明了一个名为 processAsyncIterable 的异步函数,它将异步可迭代对象作为参数,并通过 for await...of 循环遍历异步可迭代对象中的每个元素。在循环内部,我们可以使用常规的 await 语句来等待每个元素的异步操作。如果异步可迭代对象包含了多个异步操作,它们将会并行进行。
多个异步操作
前面所述的示例包含了多个异步操作,但它们是独立的,因此它们将按顺序执行。下面我们将介绍一个更为复杂的示例,在这个示例中,我们将使用 Promise.all() 方法来同时执行多个异步操作:
-- -------------------- ---- ------- ----- -------- -------------------------------------------- --------------- - ----- -------- - --- --- ----- ------ ---- -- --------------- - ----- - - ----------------------------- ----- -- -- ------ -------- ----------------- - ----- ------- - ----- ---------------------- ------ -------- -
在上面的示例中,我们声明了一个名为 processMultipleAsyncIterable 的异步函数,它将两个异步可迭代对象作为参数,并在 for await...of 循环中,使用异步 await 和异步 next() 方法来处理它们。一旦我们处理完了所有的异步操作,我们将使用 Promise.all() 方法来等待它们全部完成,并将结果返回出去。
异常处理
由于操作异步函数时,可能会发生异常错误,因此我们需要在 for await...of 循环中使用 try-catch 块来处理异常。例如,下面的示例展示了如何处理一个异步生成器函数的异常:
-- -------------------- ---- ------- ----- -------- ------------------------------------- - --- - --- ----- ------ ---- -- ----------------- - ------------------ - - ----- --- - ----------------- - -
在上面的示例中,我们调用了一个异步生成器函数 asyncGenerator(),并在 for await...of 循环中处理它的每个元素。在循环中,我们捕获了可能出现的异常,并使用 console.error() 方法来将异常打印出来。
结论
总体来说,for await...of 循环是处理异步迭代器的一种非常方便的方式。它可以用于遍历异步可迭代对象,同时处理多个异步操作,并处理异常错误。通过本文所述的示例,您可以掌握它的使用方法,并开始处理复杂的异步代码。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6703489ed91dce0dc84ad3cd