Javascript超时重启
我的node应用程序中有一个模块,它有一个setTimeout函数,每隔60分钟调用一次。为了简单起见,你可以理解每60分钟Javascript超时重启,javascript,node.js,Javascript,Node.js,我的node应用程序中有一个模块,它有一个setTimeout函数,每隔60分钟调用一次。为了简单起见,你可以理解每60分钟 它连接到一些云 从中查询一些数据 并保存在我的Mongo收藏中 setTimeout(() => { fetchData(); }, 3600000); // = 1 hour 问题是,若在fetchData函数中出现任何错误,我就会抛出一个错误,服务器的代码流就会停止,显然setTimeout不会再次启动 throw new Error(e
- 它连接到一些云
- 从中查询一些数据
- 并保存在我的Mongo收藏中
setTimeout(() => { fetchData(); }, 3600000); // = 1 hour
fetchData
函数中出现任何错误,我就会抛出一个错误,服务器的代码流就会停止,显然setTimeout不会再次启动
throw new Error(err);
可能的错误方式:
fetchData
函数是一个由10多个文件和大量JavaScript承诺组成的模块
请在评论中告诉我任何澄清的人。这绝对是可能的。您需要正确处理错误。这可以通过一个简单的try-catch块来实现:
function simulateError(){
return (Math.floor(Math.random() * 5) + 1) == 3;
}
function cloudConnect(){
if (simulateError()){
throw new Error("Cloud connect error");
}
else {
return "Connection";
}
}
function cloudQuery(){
if (simulateError()){
throw new Error("Query error");
}
else {
return "Query results";
}
}
function saveCollection(){
if (simulateError()){
throw new Error("Save error");
}
else {
return "Save results";
}
}
function fetchData(){
try {
cloudConnect();
cloudQuery();
saveCollection();
}
catch(error){
console.log("Error fetching data: ",error, " will retry in N seconds");
}
}
//Now that fetchData handles errors with a try/catch block, the interval will continue to run every 60 seconds,
//regardless of whether or not any errors are thrown
setInterval(function(){
fetchData();
}, 60000);
为什么不使用
setInterval
而不是setTimeout
?另外,60000表示60秒,而不是60分钟……为什么不使用cron作业而不是setInterval
;)在DOM准备好并给定时间后,setTimeout被称为single one,如u give 6000,但您需要将setInterval设置为循环中被调用的函数请参考此示例代码您使用的是setInterval还是setTimeout?你们展示了超时代码,但谈到间隔,这是非常重要的confusing@Pete谢谢我已用更正更新了问题,我将尝试此方法。谢谢汉克斯,这有点奏效,但看起来cron对我来说是个更好的解决方案。。。但仍然是+1