工作上,參考一位前輩寫的 Retry function 的原理記錄,實做經過 N 秒後重複做一件事情的小程式。
這裡從取得 AD 帳號來舉例。費話不多說,先上 code。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| async getADRetry(){ /*-------------------------- AD account Retry 機制 1. 成功取得 AD 回傳值 2. 無法取得 AD 開始 Retry 3. Retry 延遲秒數從 nextDelay 開始,每多一次就加 1 秒 4. Retry 次數最多 retryNumber 次 5. Retry 成功則回傳值,全部失敗則回傳 ''(空字串) --------------------------*/ let NtAccount = ''; let nextDelay = 0; let retryNumber = 5;
for(let i = 0; i < retryNumber; i++) {
// 延遲 nextDelay 秒後 await delayTime(nextDelay); // 取得 user NtAccount = getUserName();
if (NtAccount === '') { // 無法取得 AD // nextDelay 下一次加 1 秒 nextDelay = nextDelay + 1000; // Continue Retry console.log(`No AD. Retry [${i + 1}]: for ${nextDelay}ms...`); } else { // 成功取得 AD 跳出迴圈 console.log(`Get AD.`); break; }
}
return NtAccount; },
|
其中 delayTime 函數用 promise 即可實做,只要傳入毫秒 ms 就能得到延遲的動作。
1 2 3 4 5 6
| // Delay 延遲秒數 export function delayTime (interval) { return new Promise((resolve) => { setTimeout(resolve, interval); }); };
|