为了账号安全,请及时绑定邮箱和手机立即绑定

什么可以使 writeStream 在不写入文件的情况下关闭?

什么可以使 writeStream 在不写入文件的情况下关闭?

PIPIONE 2021-10-14 13:23:28
我想将文件的夹头合并到另一个文件,但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 回答

?
浮云间

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 })

    )

  }

}


查看完整回答
反对 回复 2021-10-14
  • 1 回答
  • 0 关注
  • 259 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信