Javascript超时重启

我有一个模块在我的节点应用程序,它有一个setTimeout函数,每60分钟后调用。 为了简单起见,您可以了解每60分钟后,

  • 它连接到一些云
  • 从中查询一些数据
  • 并保存在我的Mongocollections

    setTimeout(() => { fetchData(); }, 3600000); // = 1 hour 

问题是,如果在fetchData函数中出现任何错误,那么我将抛出一个错误,并且服务器的代码stream停止,显然setTimeout永远不会再次启动。

 throw new Error(err); 

可能的错误方法:

  1. login到云
  2. 通过一些查询获取数据
  3. 从云端登出等等

所以,我需要某种解决scheme,在抛出一个错误后,我可以重新启动这个setTimeout函数,这样我的抓取过程将继续进行。 我不确定是否有可能,这就是为什么我在这里张贴。

另外请注意,这个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);