Suppose I have a forloop that does some execution. I would like to break the for loop if it takes more than 20 seconds to execute.
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();
await someFunc();
}
}
Can anyone provide me a simple solution where tracking the time and breaking the loop happens on a separate thread so that I don't burden my existing for loop execution?
Please note:I have removed the dummy code and I have given explanation in the comments. I belive that I found the solution given below by one of the users and it seems perfect.
CodePudding user response:
That should be fairly simple
var stop = false;
setTimeout(()=>{ stop = true; }, 20 * 1000);
for (let step = 0; step < 5; step ) {
if (stop) break;
}
Note:
The for loop without async/await is synchronous which means even calling multiple requests/db calls/ etc. will only take less then a second for the for loop to finish. So i can't imagine what you would do in it that would take 20 seconds
CodePudding user response:
Have you tried to add a timer inside the for loop and when it finish the 20 seconds to break?
How to do a timer in Angular 5
https://www.w3schools.com/js/js_break.asp