Hardhat

如果在安全帽中失敗,如何繼續循環

  • September 6, 2022

我正在使用安全帽。

我有一個非同步函式 main(),我想以 5 秒的延遲循環。問題是,它在發生錯誤時退出循環,並且第一次發生……

(async () => {
 while (true) {
   await main() // < -- THIS IS MY FUNCTION
   await sleep(5000) < -- THIS IS MY DELAY FUNCTION I MADE
 }
})().catch(e => { /*WHEN I COME HERE, IT MEANS ERROR, I WANT TO CONTINUE*/ })

在python中它看起來像這樣

while 1: 
   try:
       main()
   except:
       time.sleep(5)
       continue()

有沒有辦法在安全帽中實現無限循環功能或者有沒有辦法等待一個好的響應並忽略安全帽中的錯誤或者我怎樣才能讓我的錯誤循環再次成為我的 main() 函式?

我一直在 stackOverflow、stackExchange 上搜尋幾個小時……什麼也沒找到。

提前感謝您的任何回答,並為我糟糕的英語感到抱歉。

您可以使用正常的 try/catch。


(async () => {
 while(true) {
   try {
     await main();
     // await sleep(500); // this is an option too
   catch(e) {
     await sleep(500);
   }
 }
})();

一個完整的例子:

function sleep(ms) {
 return new Promise((resolve) => {
   setTimeout(resolve, ms);
 });
}

let counter = 0;

async function main() {
 console.log("counter: ", counter);
 // Will fail on every odd number
 counter++;
 if (counter % 2 === 1) {
   throw Error("Error");
 }
 return counter;
}

(async () => {
 while (true) {
   try {
     const result = await main();
     console.log("result: ", result);
     await sleep(5005); // Will sleep for 5 seconds
   } catch (e) {
       // Nothing to do here?
   }
 }
})();

引用自:https://ethereum.stackexchange.com/questions/135064