我正在创建一些代码,用于从网站下载文件并自动解压缩。我这样做是为了每 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/