Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使setTimeout()像在for循环中一样工作?_Javascript - Fatal编程技术网

Javascript 如何使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

如何使setTimeout()像在for循环中一样工作? 像这样的代码

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);
    }
}