因此,有时会出现网络或服务器问题,并且https.request会因ECONNRESET而失败。我认为正确的做法是重复使用指数退避延迟,从无,以及建立长达数小时。但如果它更容易,我可以使用5分钟的延迟。我已经阅读了一篇关于异步错误处理的文章,但是我还没有能够找到这样简单的例子。我能得到一个有效的例子吗? 谢谢!
答案 0 :(得分:1)
只需在请求对象上附加error
事件处理程序:
var req = https.request(...);
req.on('error', function(err) {
// handler `err` here ...
});
重试:
// waits 1 second on first error, then 2, then 4, then 8, etc.
function makeRequest(url, lastTimeout) {
lastTimeout || (lastTimeout = 500);
var req = https.request(url, ...);
req.on('error', function(err) {
console.error(err);
lastTimeout *= 2;
setTimeout(makeRequest, lastTimeout, url, lastTimeout);
});
}
// call function
makeRequest('https://google.com');
您可能希望在重试时设置某种上限,因此它不会无限期地重试。您还可以将随机数毫秒添加到lastTimeout
,以使其每次都不那么精确指数。