这是我一直在用从网址下载图像的代码:
http.get(options, function (res) {
res.on('data', function (data) {
file.write(data);
}).on('end', function () {
file.end();
console.log(file_name + ' downloaded ');
cb(null, file.path);
}).on('error', function (err) {
console.log("Got error: " + err.message);
cb(err, null);
});
});
如何添加超时为每一个请求,以便它不会停留在等待要么是大型数据或无响应的响应?
OK,至少有两个解决您的问题。 一个简单的一个:
var request = http.get(options, function (res) {
// other code goes here
});
request.setTimeout( 10000, function( ) {
// handle timeout here
});
但可能不足够灵活。 更先进的一种:
var timeout_wrapper = function( req ) {
return function( ) {
// do some logging, cleaning, etc. depending on req
req.abort( );
};
};
var request = http.get(options, function (res) {
res.on('data', function (data) {
file.write(data);
// reset timeout
clearTimeout( timeout );
timeout = setTimeout( fn, 10000 );
}).on('end', function () {
// clear timeout
clearTimeout( timeout );
file.end();
console.log(file_name + ' downloaded ');
cb(null, file.path);
}).on('error', function (err) {
// clear timeout
clearTimeout( timeout );
console.log("Got error: " + err.message);
cb(err, null);
});
});
// generate timeout handler
var fn = timeout_wrapper( request );
// set initial timeout
var timeout = setTimeout( fn, 10000 );
文章来源: Including timeout in Node.js http.get while getting large number of image downloads