将async.js与node.js流一起使用

时间:2013-08-15 23:03:03

标签: node.js asynchronous stream pipe

我想使用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!"

当写入流写入文件时,如何进行“下一次”调用?

1 个答案:

答案 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