我想将文件的夹头合并到另一个文件,但writeStream在不将readStream内容写入或附加到输出文件的情况下关闭。我有一个async带有 for-of 循环的函数,它遍历数组,在循环内我创建了一个writableStream带标志 write truncate/write wflag if it iteration index is 0 else append wthen create a readStreamthen pipe it into writeStream. async function mergeBlocks(op) { for (const [index, block] of op.blockObjects.entries()) { const flags = index === 0? 'w' : 'a' const w = createWriteStream(op.output, { start: block.start, flags }), r = createReadStream(block.path, { start: block.start, end: block.end }) console.log(index) r.pipe(w) await new Promise(res => w.on('finish', () => { console.log('close') res() }) ) }}但它只写入第一个块并关闭writeStream而不写入输出文件的每个其他迭代。请问我做错了什么?编辑检查下面的答案。
1 回答
![?](http://img1.sycdn.imooc.com/5333a01a0001ee5302000200-100-100.jpg)
浮云间
TA贡献1829条经验 获得超4个赞
在start和end我设置的createReadStream选项是没有必要的,我只需要设置的,如果我从文件中通过设置这些只有第一个块将匹配这也解释了块开始和结束位置读取为什么只向被写入第一区块文件,而其他只是空内容。至于代码,我最终使用了 promisify stream.pipeline,这进一步简化了我的代码。
async function mergeBlocks() {
for (const [index, block] of op.blockObjects.entries()) {
await pipeline(
createReadStream(join(block.bucket, block.hash)),
createWriteStream(op.output, { flags: index === 0 ? 'w' : 'a', start: block.start })
)
}
}
添加回答
举报
0/150
提交
取消