前言

从 node.jsv10.0.0 开始,异步迭代器就出现中了,最近它们在社区中的吸引力越来越大。在本文中,我们将讨论异步迭代器的作用,还将解决它们可能用于什么目的的问题。

什么是异步迭代器

那么什么是异步迭代器?它们实际上是以前可用的迭代器的异步版本。当我们不知道迭代的值和最终状态时,可以使用异步迭代器,最终我们得到可以解决{value:any,done:boolean}对象的 promise。我们还获得了 for-await-of 循环,以帮助我们循环异步迭代器。就像 for-of 循环是针对同步迭代器一样。

与常规的 for-of 循环相反,for-await-of 循环将会 等待它收到的每个 promise 解析后再继续执行下一个。

除了流,当前没有太多支持异步迭代的结构,但是可以将符号手动添加到任何可迭代的结构中,如此处所示。

作为异步迭代器流

异步迭代器在处理流时非常有用。可读流、可写流、双工流和转换流都支持异步迭代器。

如果以这种方式编写代码,则不必通过迭代来获取每个数据块时监听data和end事件,并且 for-await-of 循环随着流本身结束而结束。

调用有分页功能的 api

你还可以用异步迭代从使用分页的源中轻松获取数据。为此,我们还需要一种从 node https 请求方法提供给我们的流中重构响应主体的方法。也可以在这里使用异步迭代器,因为 https 请求和响应是 node 中的流:

我们将向cat api发出请求,以 10 张为一组获取一些猫的图片。我们还将在请求之间添加 7 秒的延迟,最大页面数为5,以避免导致 cat api 过载。

我们还将在请求和最大页数之间添加 7 秒钟的延迟5个以避免猫cat api重载,因为那将是灾难性的。

这样,我们就会每隔 7 秒钟自动取回一整页的猫图片,以供欣赏。

一种更常见的在页面之间导航的方法是实现next和previous方法并将它们公开为控件:

如你所见,当你要获取数据页面或在应用程序的 ui 上进行无限滚动等操作时,异步迭代器将会非常有用。

这些功能已经在浏览器中使用了一段时间,在 chrome v63+、 firefox v57+ 和 safari v11.1 中可用。但是当前在 ie 和 edge 中不可用。

以上就是详解nodejs中的异步迭代器的详细内容,更多关于nodejs异步迭代器的资料请关注www.887551.com其它相关文章!