Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 异步队列与请求挂起_Javascript_Node.js_Asynchronous_Request - Fatal编程技术网

Javascript 异步队列与请求挂起

Javascript 异步队列与请求挂起,javascript,node.js,asynchronous,request,Javascript,Node.js,Asynchronous,Request,我有一个函数,可以循环内容并调用结果。然后,我将该结果添加到一个并发度为1的异步队列中。然后,我使用提供的内容发出请求,并将结果流式传输到文件中。但由于某种原因,三次电话之后,排队的人似乎都挂断了,我不知道为什么 var async = require('async'); var request = require('request'); var queue = async.queue(function (url, callback) { var file = fs.createWri

我有一个函数,可以循环内容并调用结果。然后,我将该结果添加到一个并发度为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
还假设
getURL
正在向队列中吐出5-10个URL


因此,基本上,前两个请求通过管道发送到一个文件,但由于某种原因,之后会挂起,并且永远不会命中drain函数

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


on('finish',function(){
回调(“完成”);
})

有关更多详细信息,请参阅API文档: