如何处理 ETIMEDOUT 错误?

新手上路,请多包涵

如何处理此调用的 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 许可协议

阅读 1k
2 个回答

这是在给定时间内未收到您的请求响应时引起的(通过 timeout 请求模块选项)。

基本上首先要捕获该错误,您需要在 error 上注册一个处理程序,这样就不会再抛出未处理的错误: out.on('error', function (err) { /* handle errors here */ })这里 有更多解释。

在处理程序中,您可以检查错误是否为 ETIMEDOUT 并应用您自己的逻辑: if (err.message.code === 'ETIMEDOUT') { /* apply logic */ }

如果你想再次请求文件,我建议使用 node-retrynode-backoff 模块。它使事情变得简单得多。

如果您想等待更长的时间,您可以 自己设置 timeout 请求选项。您可以将其设置为 0 以不超时。

原文由 Farid Nouri Neshat 发布,翻译遵循 CC BY-SA 3.0 许可协议

我们可以查看错误对象的属性 code 提到可能的系统错误,在 ETIMEDOUT 网络调用失败的情况下,相应地采取行动。

 if (err.code === 'ETIMEDOUT') {
    console.log('My dish error: ', util.inspect(err, { showHidden: true, depth: 2 }));
}

原文由 Lane 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题