我想使用asyn.js来限制并行io操作的数量。我遇到了以下示例:
async.forEachLimit items, 5, ((item, next) ->
request item.url, (error, response, body) ->
console.log body
next error)
, (err) ->
throw err if err
console.log "All requests processed!"
但我想将它用于溪流,就像这样:
async.forEachLimit items, 5, ((item, next)->
stream = fs.createWriteStream file
request.get(item.url).pipe(stream))
, (err)->
throw err if err
console.log "All requests processed!"
当写入流写入文件时,如何进行“下一次”调用?
答案 0 :(得分:3)
您需要绑定到与.pipe()
分开的可读流'end'
event。
res = request.get(item.url)
res.pipe(stream)
res.on 'end', next
这也可以让你绑定到它的'error'
事件:
res.on 'error', next
但是,您也可以收听Writable Stream的'finish'
event:
request.get(item.url)
.on 'finish', next