问题标签 [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.
node.js - 节点流未完成但发出结束
我正在阅读这篇文章并根据示例编写了我的代码。
我的代码:
const through = require('through2'); const bluebird = require('bluebird');
我尝试使用上述程序读取和删除大约 400 条记录。但从日志中,我发现流承诺 ( streamToPromise(stream)
) 已解决,但仍有几条记录。从日志中,我得到:
如何解决这个问题?谢谢
javascript - 未转换的数据 Node.js 转换流
我正在尝试制作一个转换流,该流从 中获取数据socket.io
,将其转换为 JSON,然后将其发送到 stdout。我完全困惑为什么数据似乎没有任何转换就直接通过了。我正在使用through2
图书馆。这是我的代码:
getStreamNames
返回一个 Promise,它解析为一个流名称数组(我正在调用外部socket.io
API),并parseString
从 API 返回一个字符串并将其转换为 JSON,以便于管理。
我正在寻找的是我的控制台在我使用解析它之后打印出字符串化的 JSON parseString
,然后使用JSON.stringify
. 实际发生的是数据直接通过流并且没有进行任何转换。
作为参考,来自 API 的数据格式很奇怪,例如
field1~field2~0x23~fieldn
所以这就是我需要这个parseString
方法的原因。
我肯定错过了什么。有任何想法吗?
编辑:
解析字符串:
谢谢
javascript - Node JS async/await 与多个 fs.writeFile 使用 through2 (Gulp/Vinyl)
我正在使用through2从 Gulp 流中生成多个文件。我正在使用 NodeJS 10.6.0,所以我想我会充分利用 async/await,但我还没有完全理解其中的机制。目前 through2done()
回调在所有文件被写入之前被触发。
这是我所拥有的(简化的) - 请注意,我没有在最后返回流,因为没有必要。
这不起作用,因为done()
在写入所有文件之前返回。我猜我错过了一两个回报,但我所做的一切似乎都没有奏效。
如果我在一切按预期工作后done()
进入doGenerateVariant
并调用它,doWriteFile
但我知道这是不正确的。
javascript - 如何推迟流读取调用
总的来说,我仍在努力摸索streams
。我已经能够使用多方从内部流式传输大文件form.on('part')
。但我需要推迟调用并在读取流之前解析它。我试过了PassThrough
,through
。through2
,但是得到了不同的结果,它主要是挂起,我不知道该怎么做,也不知道调试的步骤。我对所有选择持开放态度。感谢所有的见解。
ps 如果有人可以使用适当的术语,请确保标题可能会更好。谢谢。
node.js - 带有异步转换的长对象流过早结束
我正在使用through2Concurrent
. 此响应以缓冲区的形式出现,并使用JSONStream
. 然后将其通过管道传输到我的转换流中。然后,转换流函数发出 HTTP 请求,格式化响应并将其存储到 MongoDB 中。我们正在使用并发流,因为否则将花费不可接受的长时间来处理所有事情。
response Stream -> JSONStream.parse() -> Transform Stream
问题描述
初始响应流在解析后包含大约 18,000 个对象。finish
但是,在处理所有 18,000 个对象之前,流终止并接收到一个事件。不会引发错误,但在流结束之前实际上只处理了大约 2,000 - 5,000 个对象。处理的确切数字各不相同。
以下是相关代码:
我试过的
- 等待“结束”事件:结果相同。未处理的对象和提前终止。
- 使用
through2
(notthrough2Concurrent
):在数千个对象通过后接收 ETIMEOUT。 - 设置
highWaterMark
为 18,000:这是唯一有效的方法。如果我改变这个highWatermark
值,我可以处理所有的对象,但这实际上只是一个问题的创可贴。我想知道为什么会这样,以及我可以做些什么来以一种稳健的方式解决我的流媒体问题。
设置highWaterMark
外观如下:
为什么改变highWaterMark
价值有效?
我提前终止流的真正原因是什么?
我该如何解决?
提前感谢任何可以提供帮助的人!:)
node.js - 通过 node js 中的流连接解决了 Promise 中的错误
我需要在 Promise 解析中捕获流事件中引发的错误。就像是
我怎么能赶上断言失败?我试图在最后一个pipe()或函数调用中返回错误,但我只得到未处理的承诺拒绝
async-await - 由于背压,Nodejs through2 在 32 个块后停止写入流
第一个.js
第二个.js
在该流停止后获取多达 32 条记录的数据。实际记录为 5000。如果我编写如下代码,则将获得 5000 条记录。
但这种解决方案并不合适。对于每个记录/块暂停流并立即再次恢复它。有什么好的解决方案可以以适当的方式解决这个问题吗?
javascript - Node.js:为什么永远不会调用转换流的转换函数?
我正在尝试在 Node.js 12 中编写自定义转换器流。具体来说,我在流(数据库驱动程序)中接收 json 对象并返回转换后的对象。但是我的转换器函数永远不会被调用。我也尝试过覆盖streams.Transform 类。
我想让自定义转换通用,所以我将它封闭在一个闭包中,以便传入一个通用函数:
这是试用它的测试台:
该流似乎可以工作,从不调用实际的转换代码,并且总是只返回原始 json:
在控制台中。
我希望看到:
{ a: 1, b:2, c:2 }
编辑:我还有另一个使用类(绕过 through2)的版本,具有相同的确切问题:
node.js - 为什么我的控制台日志记录:`TimeoutOverflowWarning:4294967296000 不适合 32 位有符号整数`
我正在关注课程stream-adventure。其中一项任务是创建一个 http 服务器,它将所有请求转换为大写并在响应中返回。
现在我设法让它工作并且任务通过了。但是,控制台给了我一个 TimeoutOverflowWarning。
我想知道这是内存泄漏还是由我的代码引起的,还是其他原因。因为在错误消息中提到了 32 位,所以我想知道这是否与我使用 2016 年的 Macbook Pro 以 64 位运行有关。(节点 v10.17.0)
编码: