JavaScript工具等待循环

时间:2018-07-16 11:01:57

标签: javascript jquery

for (var i = 0; i <= 5000; i++) {
  if(i % 5 == 0){
    setTimeout(function() {
        console.log(i);
    }, 5000);
  }
  else{
    console.log(i);
  }
}

我希望一旦数字达到5,然后等待5秒钟,然后在控制台中显示6。我该如何实现?

3 个答案:

答案 0 :(得分:2)

我希望你的意思是

其console.log不可除以5个数字,然后等待5秒钟然后再次播放。

const wait = ms => {
  return new Promise((resolve) => {
    setTimeout(resolve, ms);
  });
}

const URL = [...Array(5000).keys()].map(n => n * 2);
const serial = [...Array(5000).keys()].map(n => n * 10);

(async (URL, serial) => {
  for (let i = 1; i <= 5000; i++) {
    if (i % 5 === 0) {
      await wait(5000);
      
      const url = 'http://localhost:3000/?URL='+URL[i]+'&serial='+serial[i];
      console.log('Opening url:', url);
      window.open(url, '_blank');

      continue;
    }

    await wait(500);
    console.log(i);
  }
})(URL, serial);

答案 1 :(得分:0)

javascript是单线程的,请不要使用阻塞,因为它会冻结整个程序。

SetTimeout和递归可以为您完成工作

function print(i,total) {
  if (i >= total) {
    return;
  }
  else if (i % 5 === 0) {
    setTimeout(function(){
      console.log(i);
      return print(i+1,total);
    },5000)
  } else {
    console.log(i);
    return print(i+1, total);
  }
}

print(1,100)

答案 2 :(得分:0)

function st(i1) {
    setTimeout(function () {
        console.log(i1)

    },5000)
}
function aa(st) {
    return new Promise((resolve => {
       for(var i=1;i<=10;i++){
           if(i==5){
               console.log(i)
               i=i+1;
               resolve(st(i))
               break;
           }
           console.log(i)


       }
    }))
}
async function bb() {
    var ss=await aa(st)
}
bb()