【发布时间】:2014-10-09 16:07:48
【问题描述】:
我想将 node.js 流通过管道传输到输出文件中。但我还想确保在开始管道之前存在输出目标。以下代码的问题是管道中的事件处理程序添加较晚(在调用assurePath 回调之后),因此输入流中不再提供数据。我不想使用同步 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和resuming it 之前是否尝试过pausing your stream?目前无法测试,但我认为它可能会对您有所帮助。 -
将其添加为答案。
标签: javascript node.js stream coffeescript