for (var i = 0; i <= 5000; i++) {
if(i % 5 == 0){
setTimeout(function() {
console.log(i);
}, 5000);
}
else{
console.log(i);
}
}
我希望一旦数字达到5,然后等待5秒钟,然后在控制台中显示6。我该如何实现?
答案 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()