小编典典

如何处理ETIMEDOUT错误?

node.js

如何处理此调用上的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);
        })

有没有办法等待更长的时间?还是再次请求远程文件?

究竟是什么会导致此错误?仅超时?


阅读 4206

收藏
2020-07-07

共1个答案

小编典典

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

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

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

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

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

2020-07-07