Проблема с вашим кодом, как сейчас, заключается в том, что l oop завершается до того, как запускается даже первый setTimeout
обратный вызов. Добавление console.log
после l oop подтверждает это.
var arr = [1,2,3];
for (let i = 0; i < arr.length; i++)
{
setTimeout( function timer()
{
console.log("test");
if(i === arr.length){
// start the looping after this condition match
}
}, i*3000 );
}
console.log("Loop exited");
Таким образом, нет возможности перезапустить этот l oop. Однако вы можете реорганизовать свой код, чтобы продолжить цикл по arr
с задержкой 3000 мс. Самый простой, наверное, с Promise
.
var arr = [1,2,3];
async function doWork(item){
return new Promise(resolve => {
setTimeout(() => {
console.log("finished",item); // do whatever you want to do here
resolve();
},3000);
});
}
async function test(){
var exit = false; // if you set this to true elsewhere the code will stop
var i = 0;
while(!exit){
var item = arr[i++ % arr.length];
await doWork(item);
}
}
test();