- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 stream.pipeline
从 Node 上传一些数据到 S3 的功能。我正在实现的基本思想是从请求中提取文件并将它们写入 S3。我有一个 pipeline
拉取 zip 文件并将它们成功写入 S3。但是,我想要我的第二个 pipeline
发出相同的请求,但解压缩并将解压缩的文件写入 S3。管道代码如下所示:
pipeline(request.get(...), s3Stream(zipFileWritePath)),
pipeline(request.get(...), new unzipper.Parse(), etl.map(entry => entry.pipe(s3Stream(createWritePath(writePath, entry)))))
function s3Stream(file) {
const pass = new stream.PassThrough()
s3Store.upload(file, pass)
return pass
}
pipeline
效果很好,目前在生产中运行良好。但是,在添加第二个管道时,出现以下错误:
Error [ERR_STREAM_PREMATURE_CLOSE]: Premature close
at Parse.onclose (internal/streams/end-of-stream.js:56:36)
at Parse.emit (events.js:187:15)
at Parse.EventEmitter.emit (domain.js:442:20)
at Parse.<anonymous> (/node_modules/unzipper/lib/parse.js:28:10)
at Parse.emit (events.js:187:15)
at Parse.EventEmitter.emit (domain.js:442:20)
at finishMaybe (_stream_writable.js:641:14)
at afterWrite (_stream_writable.js:481:3)
at onwrite (_stream_writable.js:471:7)
at /node_modules/unzipper/lib/PullStream.js:70:11
at afterWrite (_stream_writable.js:480:3)
at process._tickCallback (internal/process/next_tick.js:63:19)
最佳答案
TL; 博士
使用您接受的管道以完全使用可读流时,您不希望在可读结束之前停止任何事情。
深潜
经过一段时间与这些恶作剧的合作,这里有一些更有用的信息。
import stream from 'stream'
const s1 = new stream.PassThrough()
const s2 = new stream.PassThrough()
const s3 = new stream.PassThrough()
s1.on('end', () => console.log('end 1'))
s2.on('end', () => console.log('end 2'))
s3.on('end', () => console.log('end 3'))
s1.on('close', () => console.log('close 1'))
s2.on('close', () => console.log('close 2'))
s3.on('close', () => console.log('close 3'))
stream.pipeline(
s1,
s2,
s3,
async s => { for await (_ of s) { } },
err => console.log('end', err)
)
s2.end()
它会关闭所有的 parent
end 2
close 2
end 3
close 3
pipeline is the equivalent of s3(s2(s1)))
s2.destroy()
它打印并销毁所有内容,这是您的问题,这里流在正常结束之前被销毁,错误或返回/中断/抛出 asyncGenerator/asyncFunction
close 2
end Error [ERR_STREAM_PREMATURE_CLOSE]: Premature close
at PassThrough.onclose (internal/streams/end-of-stream.js:117:38)
at PassThrough.emit (events.js:327:22)
at emitCloseNT (internal/streams/destroy.js:81:10)
at processTicksAndRejections (internal/process/task_queues.js:83:21) {
code: 'ERR_STREAM_PREMATURE_CLOSE'
}
close 1
close 3
stream.pipeline() leaves dangling event listeners on the streams after theallback has been invoked. In the case of reuse of streams after failure, this can cause event listener leaks and swallowed errors.
const onclose = () => {
if (readable && !readableEnded) {
if (!isReadableEnded(stream))
return callback.call(stream, new ERR_STREAM_PREMATURE_CLOSE());
}
if (writable && !writableFinished) {
if (!isWritableFinished(stream))
return callback.call(stream, new ERR_STREAM_PREMATURE_CLOSE());
}
callback.call(stream);
};
关于node.js - 错误 [ERR_STREAM_PREMATURE_CLOSE] : Premature close in Node Pipeline stream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55959479/
我一直在为我正在编写的应用程序而苦苦挣扎,我想我开始发现我的问题是过早的优化。我的完美主义一面希望在第一次通过时就使一切变得最佳和完美,但我发现这使设计变得相当复杂。我倾向于编写尽可能多的功能以提高效
We should develop on slow boxen because it forces us to optimize early. Randall Hyde 在 The Fallacy o
编辑:回答:我需要为“einlesen()”函数创建另一个游标。 这是我第一次在 Python 中使用 SQLite3,所以请原谅我(也许)可怕的语法;)我正在尝试构建一种 DVD 数据库,它直接从亚
result_t work(resource_t& resource) { lock_t ___(resource); return work_impl(resource); } 是否
我正在构建一项新服务,当我 curl 它时,我看到一条消息 Curl_http_done:称为过早。我找不到任何关于它的含义的文档,想知道我的服务是否不符合某些 http 规范? ➜ ~ git:(
我使用 Web-flux/Reactive 和 Webclient,在 tomcat 和 spring-boot 上运行它。 一切正常。我阅读了很多关于它的信息。问题好像是每当你使用webclient
我正在尝试使用 Stream 下载 xml 文件,一切都很好,直到 xml 大小变得大于 9 MB,所以我收到此错误java.io.IOException:过早的 EOF 这是代码 BufferedI
我正在尝试使用 urllib2 和 zlib 以及来自这两个 stackoverflow 问题的技术在 python 中处理从互联网上提取的大型 gzip 文件: > Python decompres
我一直在使用 JDOM 库通过 Java Servlet 读写 XML 文件。 问题是,当我使用 AJAX 向读取和写入 XML 文件中的数据的 servlet 发送许多请求时,很多时候它无法显示错误
我正在开发一个使用 C++ 编写的大型服务器应用程序。该服务器可能需要运行数月而不重新启动。碎片在这里已经是一个可疑的问题,因为我们的内存消耗会随着时间的推移而增加。到目前为止,测量是将私有(priv
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题? Update the question所以它是on-topic对于堆栈溢出。 9年前关闭。 Improve this que
我正在尝试通过套接字将图像文件从服务器发送到客户端。 套接字以前用于将一些字符串从服务器发送到客户端(使用缓冲的输入/输出流)。 问题是无法正确接收图像文件,出现“JPEG 文件过早结束”错误。 服务
出于某种原因,我收到了 HttpRequestException,其中包含消息“响应提前结束。我正在创建大约 500 个任务,这些任务使用我的 RateLimitedHttpClient 向网站发出请
我正在尝试使用阿尔卡特 OT900A 提交表单,但出现此错误 ava.io.IOException:损坏的表单数据:提前结束在 com.oreilly.servlet.multipart.Multip
当我尝试以这种方式解析来自网络的 XML 文件时: URL url = new URL("http://www.nbp.pl/kursy/xml/a074z120416.xml"); URLConne
我的代码有问题,但我不知道哪里出了问题。 我正在为客户编写应用程序。在启动画面期间,应用程序检查 Mysql 是否正在运行以便稍后能够连接到它。如果 mysql 处于打开状态,应用程序将继续启动。如果
import java.io.*; import com.lowagie.text.DocumentException; import org.xhtmlrenderer.pdf.ITextRende
我正在使用 OpenCV 从文件夹中读取图像。出现了很多这样的消息: Corrupt JPEG data: premature end of data segment Premature end of
这是有效的,但突然间我收到了这条错误消息。 “错误信息:脚本头过早结束:cust.php" "; echo "Back to main page"; } mysql_close(); ?> 请帮忙,提
项目开发中,链接mongodb的项目,偶尔报错com.mongodb.MongoSocketReadException: Prematurely reached end of stream 报错的详细
我是一名优秀的程序员,十分优秀!