抱歉,经过进一步调查,此建议也失败了。但是当你的代码多次尝试时,偶尔也会起作用。我想出的最好的方法是使用超时重试。timeout 触发完成事件,您可以在其中检查请求是否真的完成,如果没有重试。
var request = require('request');
function doRequest(location) {
request({
timeout: 5000, // five seconds
url:location
}, function (error, response, body) {
console.log("Callback Never Runs. ");
}).on("complete", function(response) {
if(!response.complete) setImmediate(function() {
doRequest(location);
});
});
}
doRequest('http://craigslist.org');
您可以进一步扩展,在抛出错误之前只重试 X 次。
- - 原来的 - -
这可能是请求中的错误,因为在这种情况下 craigslist.org 发送所有 302 错误。但是,如果您将 followAllRedirects: true 添加到您的选项中,它会起作用。
var request = require('request');
request({
followAllRedirects: true,
url:'http://craigslist.org'
}, function (error, response, body) {
console.log("Callback Never Runs. ");
});