问题标签 [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 投票
0 回答
245 浏览

node.js - 使用异步迭代器时避免退出 for-await 循环

我正在使用这个库https://www.npmjs.com/package/event-iterator来使用异步迭代器。我有以下功能

我有一个使用它的功能如下

当我尝试在这样的异步函数中使用时

它只是打印以下内容并退出

我的问题是为什么不打印“现在在这里”。看起来进程在 for await 循环结束后结束。我怎样才能避免这种情况?

编辑

我可以这样做

它工作正常。我的写作方式有问题for-await吗?

0 投票
1 回答
778 浏览

node.js - 调用返回 AsyncIterableIterator 而不使用“for await”块的函数

我正在使用 Node.js 运行时在 TypeScript 中编写 AWS Lambda 函数。我正在使用 DynamoDB ORM 库中的“batchDelete”函数,该函数返回AsyncIterableIterator类型。

根据此处的文档https://github.com/awslabs/dynamodb-data-mapper-js#batchDelete,我应该使用 for await 循环调用该方法,如下所示:

这一切都很好,但是如果我在我的项目上启用ESLint ,问题就出在哪里。默认规则会引发错误,因为 for await 块是空的。我也收到警告,因为找到的常量从未使用过。我对找到的常量没有用处,也不想记录它。我想知道是否有另一种方法来调用AsyncIterableIterator函数,我们忽略返回的内容并且没有空块?

0 投票
3 回答
1042 浏览

javascript - 为什么这个 readline 异步迭代器不能正常工作?

这是我在节点 v14.4.0 中提炼成最小的、可重现的示例的更大过程的一部分。在这段代码中,它不会从for循环内部输出任何内容。

我在控制台中只看到这个输出:

for await (const line1 of rl1)循环永远不会进入循环for- 它只是跳过它:

但是,如果我删除其中任何一个await once(stream, 'open')语句,那么for循环就会完全按照预期执行(列出rl1文件的所有行)。因此,显然,来自 readline 接口和流之间的异步迭代器存在一些计时问题。任何想法可能发生的事情。知道什么可能导致这个问题或如何解决它吗?

仅供参考,这await once(stream, 'open')是因为异步迭代器中的另一个错误,如果打开文件时出现问题,它不会拒绝,而如果无法打开文件,则会await once(stream, 'open')导致您正确地获得拒绝(基本上是在飞行前打开) .

如果您想知道为什么存在 stream2 代码,它在较大的项目中使用,但我已将此示例缩减为最小的、可重现的示例,并且只需要这么多代码来演示问题。


编辑:在尝试稍微不同的实现时,我发现如果我将两个once(stream, "open")调用组合在 aPromise.all()中,它就会起作用。所以,这有效:

这显然不应该对您等待文件打开的确切方式敏感。某处存在一些计时错误。我想在 readline 或 readStream 上找到该错误并将其归档。有任何想法吗?

0 投票
0 回答
100 浏览

javascript - 我对 Deno 标准库的“multipelx 异步迭代器”的来源有疑问

iteratorCount以下代码的目的是什么(来自https://deno.land/std@0.64.0/async/mux_async_iterator.ts)?

据我所知,iteratorCount如果添加到 MuxIterator 的所有迭代器都没有错误,则与此无关。

此外,“在错误处理iteratorCount后不清除”和“循环while (this.iteratorCount > 0)”的概念对我来说似乎很奇怪。

我已经得出结论,这种东西是用于“手动错误处理”,以便通过添加额外的迭代器来使 Mux Async Iterator 进一步迭代。

尽管有这种观点,但我想不出iteratorCount回到零的情况。

我们可以减少计数的唯一方法是callIteratorNext()完成它。但是,我们必须在它之前添加迭代器,这使得计数增加。

所以,我不能得到任何角色iteratorCount

0 投票
0 回答
249 浏览

javascript - 如何在 JavaScript 中将异步生成器转换为数组?

我正在寻找一种方法,如果可能的话,使用内置函数将异步生成器转换为 JavaScript 中的数组。

与生成器一起使用的示例:

但同样不适用于异步生成器。

什么是标准的,并且可能是最短的方法将异步生成器/迭代器转换为数组,就像普通的生成器/迭代器一样?

我可以使用标准函数吗(最好是 ES5 兼容,如 Array.from)。

为了给我的基于 Scheme 的名为 LIPS 的 lisp 解释器提供上下文,我希望能够调用作为异步生成器的 JavaScript 函数并获得结果。

这适用于 LIPS 的 beta 版本:

但这不会:

与 JavaScript 中的相同。

而且我不确定是否需要编写一个将异步生成器转换为数组的函数(也不知道如何命名),或者我可能需要为此编写循环do。使用迭代器协议,我将能够编写不需要任何新 JavaScript 的代码。

但是我不确定异步生成器是否已经存在内置的东西,就像Array.from普通生成器一样。

我知道您可以将 while 与 await 一起用于for await of循环的每个结果,但我正在寻找一个函数,它只会创建一个可以在 LIPS 中使用而无需编写任何额外函数的数组。存在这样的东西吗?

0 投票
1 回答
299 浏览

node.js - 订阅字段必须返回 Async Iterable。收到:未定义

我将 graphql nodejs 与 apollo-server 一起使用。当我尝试时,我得到了这个错误: 在此处输入图像描述

我已经在解析器中返回了 pubsub.asyncIterator。它返回错误。另一个项目相同的设置工作,但它不工作。我在这里检查了一些堆栈问题,但我无法解决。

服务器: App.js

订阅解析器

PubSub.js

0 投票
2 回答
464 浏览

javascript - 如何映射异步生成器?

假设我们有一个异步生成器:

是否可以映射此生成器?基本上我想这样做:

截至目前.map无法识别异步迭代器。

另一种方法是使用for await ... of ,但这远不及优雅.map

0 投票
0 回答
89 浏览

javascript - 在 paginateScan、aws-sdk-vv3 中使用 AbortSignal 在 http-request-handler 中接收类型错误

当我尝试在 paginateScan 中使用带有“@aws-sdk/abort-controller”v3.18.0 AbortContoller 的 abortSignal 时,我收到一个类型错误:

我在电子中使用它和@aws-sdk/client-dynamodb v3.18.0,如下所示:

我认为我做得很好,但我找不到错误。我怎样才能使这项工作?

0 投票
0 回答
22 浏览

javascript - 如何在 Angular 12 中使用 IxJS

我正在清理一个较旧的项目并将前端的 Angular 升级到 12,并且我从 IxJS 获得了一堆构建,这是一个已经存在一段时间的库:

即使在我刚刚使用 Angular CLI 生成的干净暂存器项目中也会发生这种情况,我只是将其放入app.component.ts以确保它命中库:

并将其输出app.component.html

奇怪的是,它只报告来自库的错误;如果我将title()功能更改为:

有没有办法解决这个问题?

0 投票
1 回答
117 浏览

typescript - 带有 fp-ts 和 mongo db 的异步迭代器

在节点中使用 mongodb,我们可以使用异步迭代器。基本示例:

异步迭代器如何使用 fp-ts 转换为函数式编程?上面的for循环可以用fp-ts表达吗?我已经搜索过,但没有找到有关异步迭代器的文档。