【问题标题】:Async queue hanging up with requests异步队列挂起请求
【发布时间】:2014-10-06 03:04:14
【问题描述】:

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

所以基本上,前几个请求通过并通过管道传输到文件,但之后由于某种原因挂起并且永远不会达到排水功能。

【问题讨论】:

    标签: javascript node.js asynchronous request


    【解决方案1】:

    在调用回调之前尝试收听finish 而不是closeclose 用于 Readable 流,finish 用于 Writable 流。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-12
      • 2019-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-05
      • 1970-01-01
      相关资源
      最近更新 更多