繁体   English   中英

如何为node.js流管道创建目标路径?

[英]How to create destination path for node.js stream pipe?

我想将node.js流传输到输出文件中。 但是我还想确保在开始管道传输之前存在输出目标。 以下代码的问题在于,管道的事件处理程序添加得较晚(在assurePath回调之后),因此输入流中的数据不再可用。 我不想使用sync fs方法不阻止整个过程。

assurePath = (path, callback) ->
  path = path.split path.sep
  i = 0
  async.eachSeries path[1...path.length-1], (segment, callback) =>
    i++
    p = path[0..i].join path.sep
    fs.exists p, (exists) =>
      return callback() if exists
      fs.mkdir p, callback
  ,
    callback

saveStream = (filename, stream, callback) ->
  path = fullPath filename
  assurePath path, (error) ->
    return callback error if error

    finished = false
    stream.on('error', (error) ->
      return if finished
      finished = true
      callback error
    ).pipe(
      fs.createWriteStream path
    ).on('finish', ->
      return if finished
      finished = true
      callback()
    ).on('error', (error) ->
      return if finished
      finished = true
      callback error
    )

您可以在调用assurePath之前尝试暂停流 ,然后在回调中恢复它

saveStream = (filename, stream, callback) ->
  stream.pause()
  path = fullPath filename
  assurePath path, (error) ->
    stream.resume()
    # ...

调用.pause()将导致您的stream停止发出数据事件。 任何可用的数据将保留在内部缓冲区中。 assurePath回调中调用.resume()会使您的stream恢复发射数据事件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM