包括超时在Node.js的http.get同时获得大量的图片下载(Including timeout

2019-08-01 07:09发布

这是我一直在用从网址下载图像的代码:

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);
    });
});

如何添加超时为每一个请求,以便它不会停留在等待要么是大型数据或无响应的响应?

Answer 1:

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
标签: http node.js