Javascript 如何使setTimeout()像在for循环中一样工作?
如何使setTimeout()像在for循环中一样工作? 像这样的代码Javascript 如何使setTimeout()像在for循环中一样工作?,javascript,Javascript,如何使setTimeout()像在for循环中一样工作? 像这样的代码 function hello() { for (let index = 0; index < 3; index++) { setTimeout(function () { console.log('What\'s up!') }, 3000) console.log('Yo') } } hello() 我怎样才能做到 Yo Wh
function hello() {
for (let index = 0; index < 3; index++) {
setTimeout(function () {
console.log('What\'s up!')
}, 3000)
console.log('Yo')
}
}
hello()
我怎样才能做到
Yo
What's up(after 3 sec)
Yo
What's up(after 3 sec)
Yo
What's up(after 3 sec)
感谢您的帮助。setTimeout()将不会提供所需的结果,即使您将等待时间设置为0。
要么将console.log都放入setTimeout()中,要么删除setTimeout()。您需要这样的东西:
const次=3;
var n=0;
函数logYo(){
console.log('Yo');
logWhatsUp();
}
函数logWhatsUp(){
设置超时(()=>{
console.log('Whats Up');
n++;
if(n<次)
logYo();
}, 3000);
}
logYo()代码>一种方法是:
函数hello(){
对于(让index=1;index您需要这样的操作或
承诺(无)
异步函数hello(索引=0){
如果(指数>=3)返回;
指数+=1;
返回新承诺(函数(解析){
setTimeout(函数(){
log('What's up!');
解决();
}, 3000);
console.log('Yo');
}).then(hello.bind(null,index));
}
hello()
如果希望每3秒输出一对日志,请使用和查看以下代码段:
异步函数hello(){
对于(让索引=0;索引<3;索引++){
console.log('Yo');
等待新的承诺(解决=>{
setTimeout(函数(){
log('What's up!');
解决();
}, 3000);
});
}
}
hello();您可以创建一个使用setTimeout()自动执行的函数,但必须合并一个全局函数作为计数器
let counter = 0;
function hello(n){
console.log("Yo");
console.log("What's up?);
counter++;
if(counter > n){
setTimeout(hello, 3000);
}
}
不可能。
setTimeout
为事件循环的下一个周期安排函数的执行,而console.log('Yo')
总是立即执行。您应该删除setTimeout
或移动console.log('Yo'))在/<代码>内,或将其设置为<代码> SETTIMEOUT 本身,其延迟与另一个相同。在生产中,我们使用承诺来解决这类问题。请考虑通过单击该复选标记接受答案,除非您想问这个问题。问题中提到的ted输出。你的输出是错误的,他想在3秒后显示所有的“What's up!”日志,而不是3秒后的第一个、6秒后的第二个和9秒后的第三个…我的不是。所有的承诺都是并行的,让它在3秒后输出所有内容。
let counter = 0;
function hello(n){
console.log("Yo");
console.log("What's up?);
counter++;
if(counter > n){
setTimeout(hello, 3000);
}
}