如何处理此调用的 etimedout 错误?
var remotePath = "myremoteurltocopy"
var localStream = fs.createWriteStream("myfil");;
var out = request({ uri: remotePath });
out.on('response', function (resp) {
if (resp.statusCode === 200) {
out.pipe(localStream);
localStream.on('close', function () {
copyconcurenceacces--;
console.log('aftercopy');
callback(null, localFile);
});
}
else
callback(new Error("No file found at given url."), null);
})
有什么方法可以等待更长的时间?或者再次请求远程文件?
究竟是什么导致了这个错误?只有超时?
原文由 mcbjam 发布,翻译遵循 CC BY-SA 4.0 许可协议
这是在给定时间内未收到您的请求响应时引起的(通过
timeout
请求模块选项)。基本上首先要捕获该错误,您需要在
error
上注册一个处理程序,这样就不会再抛出未处理的错误:out.on('error', function (err) { /* handle errors here */ })
。 这里 有更多解释。在处理程序中,您可以检查错误是否为 ETIMEDOUT 并应用您自己的逻辑:
if (err.message.code === 'ETIMEDOUT') { /* apply logic */ }
。如果你想再次请求文件,我建议使用 node-retry 或 node-backoff 模块。它使事情变得简单得多。
如果您想等待更长的时间,您可以 自己设置
timeout
请求选项。您可以将其设置为 0 以不超时。