javascript - 试图捕获与代码无关的错误,而是像互联网不工作那样的错误,我将如何去做呢?

标签 javascript node.js try-catch

我正在创建一些代码,用于从网站下载文件并自动解压缩。我这样做是为了每 4 小时检查一次文件的最新版本是否已下载,如果已经下载,则不会再次下载。现在我想要这样做,以便如果由于某种原因下载失败,它不会再等待 4 小时再次下载文件,而是立即尝试再次下载,并继续尝试这样做,直到下载成功。

我使用了“try”和“catch”语句来做到这一点,这样如果它尝试下载文件,并且如果文件下载失败,它将捕获错误,然后在catch语句中它会做同样的事情,但每 5 秒而不是每 4 小时做一次。

try{
    interval()
//this is referencing a function that downloads the file every 4 hours
    setTimeout(stopInterval, 5000);
//this is to prevent the function from stacking every time the try statement is called
    }
  }
  catch(e){
    checkInterval()
//this is referencing a function that does the same as what's in the try statement but does it every 5 seconds instead
    }
  }

它成功的做法是,如果它检测到代码本身存在错误(例如,它尝试调用的函数拼写错误),它将执行我要求它执行的操作,即每 5 秒重复一次该函数。但我想要它做的正是这一点,只不过它将适用于其他错误,例如互联网断开连接。我尝试过使用“抛出新错误”结构,但并不真正知道如何正确使用它,或者如何将其专门应用于与互联网或其他问题相关的错误。如果有一种方法可以使用 try catch 语句来做到这一点,那就太棒了,但如果我必须做其他事情,那么任何帮助将不胜感激。我是这个网站的新手,如果没有很好地解释,很抱歉,如果您需要我澄清任何内容,请随时告诉我。预先感谢!

最佳答案

我找到了解决方案。对于其他想知道解决方案是什么的人,这就是我所做的。

const dns = require('dns');
const navigator = global.navigator = {onLine: true};

((navigator) => {
  const dns = require('dns');
  setInterval(() => {
    dns.resolve('www.google.com', 
                error => navigator.onLine = !error);
  }, 5000);
})(navigator);

它的作用是手动设置“navigator.onLine”,因为它在 NodeJS 中默认不起作用。然后我通过执行以下操作导致它创建错误:

var isOnline = navigator.onLine;
    if (!isOnline) {
      throw new Error('Connection Unsuccessful');
    }

通过创建错误,它允许 catch 语句将其检测为错误,并在互联网断开连接时执行您希望它执行的代码。

关于javascript - 试图捕获与代码无关的错误,而是像互联网不工作那样的错误,我将如何去做呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57894662/

相关文章:

javascript - 如何将页面上的所有帧打印到一个文件中

node.js - 我应该如何使用 Nodejs Rest API 向用户提供可下载文件?

调试空 catch block 中的异常

swift - do - try - catch 代码不尝试或捕获。只是做

java - CATCH 异常是否会报告给 Firebase/Fabric 等?

javascript - 如何清除 map 上的所有标记?

javascript - 无法从后台代码注册 Javascript

javascript - 删除以 'data-wf-' 开头的属性

javascript - 循环 Promise 返回 undefined object

javascript - 如何在 Angular 4 中使用路由器 url 通配符?