问题标签 [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.
node.js - 使用异步迭代器时避免退出 for-await 循环
我正在使用这个库https://www.npmjs.com/package/event-iterator来使用异步迭代器。我有以下功能
我有一个使用它的功能如下
当我尝试在这样的异步函数中使用时
它只是打印以下内容并退出
我的问题是为什么不打印“现在在这里”。看起来进程在 for await 循环结束后结束。我怎样才能避免这种情况?
编辑
我可以这样做
它工作正常。我的写作方式有问题for-await
吗?
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函数,我们忽略返回的内容并且没有空块?
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 上找到该错误并将其归档。有任何想法吗?
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
。
javascript - 如何在 JavaScript 中将异步生成器转换为数组?
我正在寻找一种方法,如果可能的话,使用内置函数将异步生成器转换为 JavaScript 中的数组。
与生成器一起使用的示例:
但同样不适用于异步生成器。
什么是标准的,并且可能是最短的方法将异步生成器/迭代器转换为数组,就像普通的生成器/迭代器一样?
我可以使用标准函数吗(最好是 ES5 兼容,如 Array.from)。
为了给我的基于 Scheme 的名为 LIPS 的 lisp 解释器提供上下文,我希望能够调用作为异步生成器的 JavaScript 函数并获得结果。
这适用于 LIPS 的 beta 版本:
但这不会:
与 JavaScript 中的相同。
而且我不确定是否需要编写一个将异步生成器转换为数组的函数(也不知道如何命名),或者我可能需要为此编写循环do
。使用迭代器协议,我将能够编写不需要任何新 JavaScript 的代码。
但是我不确定异步生成器是否已经存在内置的东西,就像Array.from
普通生成器一样。
我知道您可以将 while 与 await 一起用于for await of
循环的每个结果,但我正在寻找一个函数,它只会创建一个可以在 LIPS 中使用而无需编写任何额外函数的数组。存在这样的东西吗?
javascript - 如何映射异步生成器?
假设我们有一个异步生成器:
是否可以映射此生成器?基本上我想这样做:
截至目前.map
无法识别异步迭代器。
另一种方法是使用for await ... of
,但这远不及优雅.map
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,如下所示:
我认为我做得很好,但我找不到错误。我怎样才能使这项工作?
javascript - 如何在 Angular 12 中使用 IxJS
我正在清理一个较旧的项目并将前端的 Angular 升级到 12,并且我从 IxJS 获得了一堆构建,这是一个已经存在一段时间的库:
即使在我刚刚使用 Angular CLI 生成的干净暂存器项目中也会发生这种情况,我只是将其放入app.component.ts
以确保它命中库:
并将其输出app.component.html
:
奇怪的是,它只报告来自库的错误;如果我将title()
功能更改为:
有没有办法解决这个问题?
typescript - 带有 fp-ts 和 mongo db 的异步迭代器
在节点中使用 mongodb,我们可以使用异步迭代器。基本示例:
异步迭代器如何使用 fp-ts 转换为函数式编程?上面的for循环可以用fp-ts表达吗?我已经搜索过,但没有找到有关异步迭代器的文档。