假設我有一個執行某些操作的 forloop。如果執行時間超過 20 秒,我想中斷 for 回圈。
async function mainFunc(){
for (let step = 0; step < 5; step ) {
// Runs some complex operation that is computationally intensive
//someFunc() is a async method. SomeAnotherFunc() is a synchronous one.
await someFunc();
someAnotherFunc();//this function contains built in function execSync() that runs command line functions
await someFunc();
}
}
誰能為我提供一個簡單的解決方案,其中跟蹤時間和中斷回圈發生在單獨的執行緒上,這樣我就不會加重現有的 for 回圈執行負擔?
這個答案部分對我有用。@Molda 給出的解決方案只會在 Async 方法的情況下幫助我。如果你看到我提供的代碼片段,有一個名為 someAnotherFunc() 的同步方法,它有一個運行命令列函式的 nodejs 行程函式“execSync”。現在跟蹤這個函式的時間對我來說實際上是一個痛點,因為我無法訪問該方法,因為它是一個內置函式。我將不勝感激您對如何進一步進行的建議。
uj5u.com熱心網友回復:
那應該相當簡單
var stop = false;
setTimeout(()=>{ stop = true; }, 20 * 1000);
for (let step = 0; step < 5; step ) {
if (stop) break;
}
筆記:
沒有 async/await 的 for 回圈是同步的,這意味著即使呼叫多個請求/db 呼叫/等也只需要不到一秒鐘的時間來完成 for 回圈。所以我無法想象你會在里面做什么 需要 20 秒
uj5u.com熱心網友回復:
您是否嘗試在 for 回圈中添加一個計時器,并在它完成 20 秒后中斷?
如何在 Angular 5 中做一個計時器
https://www.w3schools.com/js/js_break.asp
像這樣的東西:
var stopTimer = false;
setTimeout(() => {
--- stopTimer = true;
}, 20 * 1000);
for (let step = 0; step < 5; step ) {
--- if (stopTimer) break;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/374069.html
標籤:javascript 节点.js 表达 计时器
下一篇:為什么無法顯示標題的值?
