异步队列挂起请求

Async queue hanging up with requests

本文关键字:请求 挂起 队列 异步      更新时间:2023-09-26

我有一个遍历内容并回调结果的函数。然后将结果添加到并发性为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个url。

所以基本上,前两个请求使它通过并管道到一个文件,但由于某种原因之后它挂起并且从未命中drain函数。

在调用回调之前尝试听finish而不是closeclose为可读流,finish为可写流。

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

参考API文档了解更多细节:http://nodejs.org/api/stream.html stream_event_finish