异步队列挂起请求
Async queue hanging up with requests
我有一个遍历内容并回调结果的函数。然后将结果添加到并发性为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
而不是close
。close
为可读流,finish
为可写流。
file.on('finish', function() {
callback('done');
})
参考API文档了解更多细节:http://nodejs.org/api/stream.html stream_event_finish
相关文章:
- Chrome浏览器“;挂起”;同时在循环中执行AJAX请求
- 如何在AngularJS中取消挂起的请求
- IE 10 挂起 XMLHttpRequest 6 分钟,然后响应请求(使用 AngularJS 实现 CRSF)
- 如何查明SignalR客户端上是否有挂起的请求
- 中止Angular中挂起的http请求未中止
- 文件系统读取文件和 xml2js parseString 的挂起请求
- 在 AngularJS 中中止挂起的 ajax 请求
- 节点/快速挂起的请求
- 由挂起导致的 AWS Lambda 函数“进程在完成请求之前退出”
- 如何在javascript中获取所有挂起的http请求
- Node.js 方法不返回任何响应,挂起请求
- 通过 .scope().call() 从 JS 外部调用 Angular 服务会挂起请求
- cakehp3 img挂起请求,image没有't负载
- 事件发射器发射一次,请求挂起
- 使用纯javascript检索挂起的AJAX请求数
- 当通过Ajax发送请求时,如何停止挂起页面
- 如何停止所有活动或挂起的ajax请求
- 等待等效请求挂起
- Node.js客户端请求挂起
- 从NodeJS到Node/Express的安全POST请求挂起