挂起请求的异步队列

时间:2014-08-12 21:44:45

标签: javascript node.js asynchronous request

我有一个循环遍历内容并回调结果的函数。然后,我将结果添加到并发为1的异步队列。然后,我使用提供的内容发出请求,并将结果传输到文件。但由于某种原因,队列似乎在三次调用后挂断,我无法弄清楚原因。

var async = require('async');
var request = require('request');

var queue = async.queue(function (url, callback) { 

  var file = fs.createWriteStream('./images/' + url.split('/')[5])
  var image = request(url);
  image.pipe(file);
  file.on('close', function() {
    callback('done')
  })
},1);

getUrls(query, function(e, url) {
  queue.push(url, function(data) {
    console.log(data)
  });
});

queue.drain = function() {
    console.log('all items have been processed');
}


Assume all files are just random images like this 
http://pandodaily.files.wordpress.com/2014/03/google-in-bed-w-mercenaries-n-military-e1395865855795.jpg?w=900&h=499

还假设getUrls正在向队列中吐出5-10个网址。

所以基本上,前几个请求通过并管道传输到一个文件,但由于某种原因,在此之后是挂起并且从不命中排水功能。

1 个答案:

答案 0 :(得分:0)

在调用回调之前,请尝试收听finish而不是closeclose用于可读流,其中finish用于可写流。

file.on('finish', function() { callback('done'); })

有关更多详细信息,请参阅API文档: http://nodejs.org/api/stream.html#stream_event_finish