3

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

当 writestream 完成写入文件后,如何进行“下一个”调用?

4

1 回答 1

3

您需要绑定'end'.pipe().

res = request.get(item.url)
res.pipe(stream)
res.on 'end', next

这也可以让你绑定到它的'error'事件:

res.on 'error', next

但是,您也可以收听 Writable Stream 的'finish'事件

request.get(item.url)
    .on 'finish', next
于 2013-08-15T23:48:27.043 回答