簡體   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