Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.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_Javascript_Settimeout - Fatal编程技术网

Javascript 正确使用setTimeout

Javascript 正确使用setTimeout,javascript,settimeout,Javascript,Settimeout,我正试图使其成为document.write()9,然后暂停1秒,写入8,然后暂停1秒,写入7,然后暂停1秒,依此类推,直到达到0。但现在它只是一次打印出整个内容。我做错了什么 var delay = function(){ setTimeout(delay, 1000); // check again in a second } var count = 10; while (count > 0) { count--; delay(); document.write(count); }

我正试图使其成为document.write()9,然后暂停1秒,写入8,然后暂停1秒,写入7,然后暂停1秒,依此类推,直到达到0。但现在它只是一次打印出整个内容。我做错了什么

var delay = function(){
setTimeout(delay, 1000); // check again in a second
}

var count = 10;
while (count > 0) {
count--;
delay();
document.write(count);
}

9876543210

设置超时是异步的,它不会暂停执行

var count = 10;
var delay = function(){
  if (count > 0) {
    count--;
    document.write(count);
    setTimeout(delay, 1000); // check again in a second
  }
}
delay();

这可能行得通,但我认为document.write在页面加载完成后不起作用。这意味着您不能在超时回调中调用它。

setTimeout是异步的,它不会暂停执行

var count = 10;
var delay = function(){
  if (count > 0) {
    count--;
    document.write(count);
    setTimeout(delay, 1000); // check again in a second
  }
}
delay();
这可能行得通,但我认为document.write在页面加载完成后不起作用。这意味着您不能在超时回调中调用它。

两个问题:

  • 调用
    setTimeout
    只会在超时过期后将要执行的函数排队,而不会暂停主线程

  • document.write
    是document.error,通常-如果文档已经被解析,它将被替换为新的HTML字符串。请改用适当的DOM方法

您可以
每秒等待
承诺并追加
span
s:

constdelay=()=>newpromise(res=>setTimeout(res,1000));
(异步()=>{
让计数=10;
而(计数>0){
等待延迟();
计数--;
document.body.appendChild(document.createElement('span')).textContent=count;
}
})();两个问题:

  • 调用
    setTimeout
    只会在超时过期后将要执行的函数排队,而不会暂停主线程

  • document.write
    是document.error,通常-如果文档已经被解析,它将被替换为新的HTML字符串。请改用适当的DOM方法

您可以
每秒等待
承诺并追加
span
s:

constdelay=()=>newpromise(res=>setTimeout(res,1000));
(异步()=>{
让计数=10;
而(计数>0){
等待延迟();
计数--;
document.body.appendChild(document.createElement('span')).textContent=count;
}

})();
下面是一个使用
setInterval
console.log

var count = 9;

var timer = setInterval(delay, 1000);

function delay() {
  console.log(count--);
  if(count<0)
    clearInterval(timer);
}
var计数=9;
var定时器=设置间隔(延迟,1000);
函数延迟(){
console.log(计数--);

if(count这里有一个使用
setInterval
console.log

var count = 9;

var timer = setInterval(delay, 1000);

function delay() {
  console.log(count--);
  if(count<0)
    clearInterval(timer);
}
var计数=9;
var定时器=设置间隔(延迟,1000);
函数延迟(){
console.log(计数--);
如果(计算)