我有一个循环遍历内容并回调结果的函数。然后,我将结果添加到并发为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个网址。
所以基本上,前几个请求通过并管道传输到一个文件,但由于某种原因,在此之后是挂起并且从不命中排水功能。
答案 0 :(得分:0)
在调用回调之前,请尝试收听finish
而不是close
。 close
用于可读流,其中finish
用于可写流。
file.on('finish', function() {
callback('done');
})
有关更多详细信息,请参阅API文档: http://nodejs.org/api/stream.html#stream_event_finish