在 ES2017 中,新增了一个 For await-of 循环,它可以用来遍历异步迭代器(AsyncIterator),并在每个异步迭代器返回一个 promise 时暂停迭代,等待 promise 执行完毕后再继续迭代。
异步迭代器
异步迭代器是一个实现了 Symbol.asyncIterator 方法的对象,它可以返回一个异步迭代器对象,该对象实现了 next 方法,返回一个 Promise 对象。当 Promise 对象 resolve 时,返回一个包含 value 和 done 属性的对象,其中 value 表示迭代器的下一个值,done 表示是否已经迭代完成。
示例代码:
-- -------------------- ---- ------- ----- ------------- - - ------------------------ - --- - - -- ------ - ----- ------ - -- -- - -- - ------ - ------ ---- ----- ----- -- - ---- - ------ - ----- ---- -- - - -- - -- ------ -------- -- - --- ----- ------ --- -- -------------- - ----------------- - -----展开代码
输出结果:
0 1 2
For await-of 循环
For await-of 循环可以遍历异步迭代器,语法和普通的 For of 循环类似,只是使用了 await 关键字来等待异步迭代器返回的 Promise 对象。
示例代码:
-- -------------------- ---- ------- ----- --------- ---------------- - ----- ------------------- ----- ------------------- ----- ------------------- - ------ -------- -- - --- ----- ------ --- -- ----------------- - ----------------- - -----展开代码
输出结果:
1 2 3
指导意义
For await-of 循环为异步编程提供了更加方便的遍历异步迭代器的方式,可以使代码更加简洁、易于理解。但需要注意的是,由于 For await-of 循环会等待异步迭代器返回的 Promise 对象,所以在使用时需要确保异步迭代器能够及时返回 Promise 对象,否则会导致循环无法继续。
总结
通过本文的介绍,我们了解了 ES2017 中的 For await-of 循环,以及如何使用它遍历异步迭代器。同时,我们也了解了异步迭代器的定义和作用,以及在使用 For await-of 循环时需要注意的事项。希望本文能够对您理解异步编程有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6567399ad2f5e1655d019f5b