问题标签 [async-iterator]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
1208 浏览

node.js - Node.js“请求”库是否支持异步可迭代响应流?

我对 Node.js 库有点陌生,我正在尝试弄清楚如何在 HTTP 响应流上使用异步迭代。我的总体目标是读取大型响应流并在块到达时对其进行处理,目前通过生成器函数。我无法将整个响应存储在内存中进行处理。

我正在使用该request库执行 HTTP 请求,如下所示。

当我运行时doWork(),我收到一条错误消息,指出stream变量 ofgetChunks()不是异步可迭代的。

TypeError:流不是异步可迭代的

这令人惊讶,因为我认为所有可读流通常都是异步可迭代的,并且请求库在没有提供回调时返回一个流。当我替换request.get(...)fs.createReadStream(...)某个本地文件时,一切都按预期工作。

也许request图书馆不支持这一点。如果是这样,我需要做什么来通过异步迭代处理 HTTP 响应流?

使用 Node.js 11.13 和request2.88.0。

0 投票
1 回答
158 浏览

typescript - ts / js 中是否有使用异步迭代器的目录遍历器?

我在 npm 上发现了很多 walker,但没有一个使用异步迭代器。他们中的大多数要么使用回调,要么使用导致巨大目录内存泄漏的承诺。

是否有任何最近使用以下模式的库:

然后像这样使用它:

0 投票
1 回答
7572 浏览

javascript - 在 Typescript 中使用 AsyncIterator - 必需选项

考虑 MDN 中的这个基本AsyncIterator 示例

在节点 10.16.0 上运行它可以正常工作。但是,我似乎无法让它通过 Typescript 运行。使用这个 tsconfig:

导致The type returned by the 'next()' method of an async iterator must be a promise for a type with a 'value' property.错误 target 的相同错误esnext

如果我完全删除该target选项,我会得到一个Type '{ [Symbol.asyncIterator](): { i: number; next(): Promise<{ done: boolean; }>; }; }' is not an array type or a string type.

TS 手册提到了几个警告,但没有一个可以解决我的问题。奇怪的是,迭代异步生成器工作正常。

编译此示例需要哪些 tsconfig 选项?

0 投票
1 回答
2383 浏览

javascript - 如何处理来自 fs readline.Interface 异步迭代器的错误

基于processLineByLine()的示例,我注意到如果给定的文件名不存在,我们将无法捕获错误。在这种情况下,程序以如下方式结束:

UnhandledPromiseRejectionWarning:错误:ENOENT:没有这样的文件或目录

因此,我提出可捕获错误的最简单方法是对函数进行 2 处修改processLineByLine()

  1. 将其放入发电机中,例如function*
  2. await文件存在检查await access(filename, fs.constants.F_OK)

最后我不得不将readline.Interface实例转换为异步生成器。我特别不喜欢这最后一部分。结果lines()函数如下:

问题lines():如果文件名不存在,是否有更好的方法可以返回异步迭代器或抛出错误?

BUG 报告:关于 @jfriend00 的观察,我在 nodejs 上打开了一个 Bug 问题:https ://github.com/nodejs/node/issues/30831

0 投票
1 回答
536 浏览

javascript - Parallel asynchronous iteraor - is it possible?

Right now I have the following code:

As is, the requests won't block the single thread of node, but they will happen in sequence. I'm wondering if it would be possible to change the code to force parallelism.

0 投票
0 回答
38 浏览

node.js - 我怎样才能创建一个可读的管道到一个可写的,这将允许我不时向它添加内容?

我想做的事情可能很简单,但是在研究了一段时间之后,我想出的实现有点复杂。

这就是我想要做的:我希望能够创建一个 Readable 并将其通过管道传输到 Writable,并且能够不时(异步)向 Readable 添加其他数据,并让它继续将数据传输到可写,然后稍后将其关闭。

以下解决方案可能有效(我没有对其进行太多测试),但它似乎太复杂而无法正确执行此操作。

这样做的正确和简单的方法是什么?

0 投票
0 回答
736 浏览

javascript - 未处理的拒绝(TypeError):尝试迭代不可迭代的实例无效

我正在从这个精彩的页面学习异步迭代器和生成器,但是当我尝试使用以下“简单”代码时......

...我的 React 应用程序返回此错误:

错误消息指的是这一行:

如果直接在各种浏览器的控制台上使用它不会给我任何问题。

这是为什么?如何在 React 中使用它?

编辑

我正在使用expo来构建我的应用程序。

0 投票
1 回答
40 浏览

javascript - 异步迭代器和生成器:流式 GeoJSONL

我正在尝试复制Brett Camper关于流式传输 GeoJSONL 文件的代码,它非常复杂。

我正在尝试逐步了解它的作用,但我真的无法弄清楚这种语法的作用:

任何人都可以向我解释一下吗?如果可能的话,我想在Mozilla web docs上找到一些关于它的信息。

另外,如果有人可以向我解释给定示例中的代码流程,我将非常感激!

谢谢!

0 投票
1 回答
88 浏览

javascript - 这个 Promise 取消实现是否可以在正确的轨道上减少异步迭代?

我想为我的库中的一种方法启用 Promise 取消,reduce. 我只对取消异步迭代的 Promise 感兴趣,因为它们很可能无限期挂起。

上面的代码似乎可以工作,但我不禁觉得这里有内存泄漏。特别是在await iter.next()for await (const xi of iter)。如果这些 await 语句永远占用(对于异步迭代器可能会如此),则reduceAsyncIterable可能永远不会返回。从用户的角度来看,这很好,因为在 中发生短路reduce,因为用户看到的 Promise 已解决。但是从计算机的角度来看,取消这个操作的 Promise 会导致内存泄漏吗?

我希望能够cancel在返回的承诺上使用该函数,如下所示:

0 投票
3 回答
677 浏览

javascript - 异步生成器:产生被拒绝的承诺

我一直在玩异步生成器,试图制作一个“承诺排序”生成器,它接受一系列承诺,并按照它们解决或拒绝的顺序一个接一个地产生承诺。所以像:

像这样使用这个生成器的想法:

但是,我注意到这将达到第二个承诺,然后生成器将停止。似乎是因为拒绝了“第二个”承诺。当被拒绝时,调用生成器将yield prom生成器中创建一个异常。prom

但这是我困惑的根源。我不想在这里创建异常,我只想将被拒绝的承诺作为value迭代器结果的结果。我不希望它被打开。几乎就像这被视为yield await prom;,但正如您所见,没有await电话。

这里发生了什么,我怎样才能简单地从这个生成器中产生一个被拒绝的承诺。


这是可运行片段中的上述代码: