问题标签 [through2]

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 投票
1 回答
213 浏览

node.js - 确保 promise 在 transformFunction 中得到解决

我正在学习through2sequelize

我的代码:

我试图清楚地表达我的问题。Doc并且Comment是续集模型。我想使用流从数据库中一一读取文档实例并删除每个文档实例上的注释。Comment.findOne并且com.destroy()都会返回承诺。我想为每个解决的承诺doc然后调用cb(). 但是我上面的代码不能工作,在com 被销毁之前,代码已经运行完毕。

如何解决?谢谢

我将上面的代码包装在mocha测试中,比如

但在流完成读取之前,测试存在。

0 投票
1 回答
463 浏览

node.js - 节点流未完成但发出结束

我正在阅读这篇文章并根据示例编写了我的代码。

我的代码:

const through = require('through2'); const bluebird = require('bluebird');

我尝试使用上述程序读取和删除大约 400 条记录。但从日志中,我发现流承诺 ( streamToPromise(stream)) 已解决,但仍有几条记录。从日志中,我得到:

如何解决这个问题?谢谢

0 投票
1 回答
370 浏览

javascript - 未转换的数据 Node.js 转换流

我正在尝试制作一个转换流,该流从 中获取数据socket.io,将其转换为 JSON,然后将其发送到 stdout。我完全困惑为什么数据似乎没有任何转换就直接通过了。我正在使用through2图书馆。这是我的代码:

getStreamNames返回一个 Promise,它解析为一个流名称数组(我正在调用外部socket.ioAPI),并parseString从 API 返回一个字符串并将其转换为 JSON,以便于管理。

我正在寻找的是我的控制台在我使用解析它之后打印出字符串化的 JSON parseString,然后使用JSON.stringify. 实际发生的是数据直接通过流并且没有进行任何转换。

作为参考,来自 API 的数据格式很奇怪,例如

field1~field2~0x23~fieldn

所以这就是我需要这个parseString方法的原因。

我肯定错过了什么。有任何想法吗?

编辑:

解析字符串:

谢谢

0 投票
1 回答
1163 浏览

javascript - Node JS async/await 与多个 fs.writeFile 使用 through2 (Gulp/Vinyl)

我正在使用through2从 Gulp 流中生成多个文件。我正在使用 NodeJS 10.6.0,所以我想我会充分利用 async/await,但我还没有完全理解其中的机制。目前 through2done()回调在所有文件被写入之前被触发。

这是我所拥有的(简化的) - 请注意,我没有在最后返回流,因为没有必要。

这不起作用,因为done()在写入所有文件之前返回。我猜我错过了一两个回报,但我所做的一切似乎都没有奏效。

如果我在一切按预期工作后done()进入doGenerateVariant并调用它,doWriteFile但我知道这是不正确的。

0 投票
1 回答
267 浏览

javascript - 如何推迟流读取调用

总的来说,我仍在努力摸索streams。我已经能够使用多方从内部流式传输大文件form.on('part')。但我需要推迟调用并在读取流之前解析它。我试过了PassThroughthroughthrough2,但是得到了不同的结果,它主要是挂起,我不知道该怎么做,也不知道调试的步骤。我对所有选择持开放态度。感谢所有的见解。

ps 如果有人可以使用适当的术语,请确保标题可能会更好。谢谢。

0 投票
0 回答
71 浏览

node.js - 带有异步转换的长对象流过早结束

我正在使用through2Concurrent. 此响应以缓冲区的形式出现,并使用JSONStream. 然后将其通过管道传输到我的转换流中。然后,转换流函数发出 HTTP 请求,格式化响应并将其存储到 MongoDB 中。我们正在使用并发流,因为否则将花费不可接受的长时间来处理所有事情。

response Stream -> JSONStream.parse() -> Transform Stream

问题描述
初始响应流在解析后包含大约 18,000 个对象。finish但是,在处理所有 18,000 个对象之前,流终止并接收到一个事件。不会引发错误,但在流结束之前实际上只处理了大约 2,000 - 5,000 个对象。处理的确切数字各不相同。

以下是相关代码:

我试过的

  • 等待“结束”事件:结果相同。未处理的对象和提前终止。
  • 使用through2(not through2Concurrent):在数千个对象通过后接收 ETIMEOUT。
  • 设置highWaterMark为 18,000:这是唯一有效的方法。如果我改变这个highWatermark值,我可以处理所有的对象,但这实际上只是一个问题的创可贴。我想知道为什么会这样,以及我可以做些什么来以一种稳健的方式解决我的流媒体问题。

设置highWaterMark外观如下:

为什么改变highWaterMark价值有效?

我提前终止流的真正原因是什么?

我该如何解决?

提前感谢任何可以提供帮助的人!:)

0 投票
1 回答
391 浏览

node.js - 通过 node js 中的流连接解决了 Promise 中的错误

我需要在 Promise 解析中捕获流事件中引发的错误。就像是

我怎么能赶上断言失败?我试图在最后一个pipe()或函数调用中返回错误,但我只得到未处理的承诺拒绝

0 投票
0 回答
157 浏览

async-await - 由于背压,Nodejs through2 在 32 个块后停止写入流

第一个.js

第二个.js

在该流停止后获取多达 32 条记录的数据。实际记录为 5000。如果我编写如下代码,则将获得 5000 条记录。

但这种解决方案并不合适。对于每个记录/块暂停流并立即再次恢复它。有什么好的解决方案可以以适当的方式解决这个问题吗?

0 投票
1 回答
676 浏览

javascript - Node.js:为什么永远不会调用转换流的转换函数?

我正在尝试在 Node.js 12 中编写自定义转换器流。具体来说,我在流(数据库驱动程序)中接收 json 对象并返回转换后的对象。但是我的转换器函数永远不会被调用。我也尝试过覆盖streams.Transform 类。

我想让自定义转换通用,所以我将它封闭在一个闭包中,以便传入一个通用函数:

这是试用它的测试台:

该流似乎可以工作,从不调用实际的转换代码,并且总是只返回原始 json:

在控制台中。

我希望看到: { a: 1, b:2, c:2 }

编辑:我还有另一个使用类(绕过 through2)的版本,具有相同的确切问题:

0 投票
3 回答
7068 浏览

node.js - 为什么我的控制台日志记录:`TimeoutOverflowWarning:4294967296000 不适合 32 位有符号整数`

我正在关注课程stream-adventure。其中一项任务是创建一个 http 服务器,它将所有请求转换为大写并在响应中返回。

现在我设法让它工作并且任务通过了。但是,控制台给了我一个 TimeoutOverflowWarning。

我想知道这是内存泄漏还是由我的代码引起的,还是其他原因。因为在错误消息中提到了 32 位,所以我想知道这是否与我使用 2016 年的 Macbook Pro 以 64 位运行有关。(节点 v10.17.0)

编码:

谷歌搜索给出了这个问题的各种原因(示例 1示例 2),并且似乎大多数解决方案在使用的库中都是固定的。