如何调用setTimeout?

How to call the setTimeout?

我得到下面提到的代码,并要求我在 3 秒后打印控制台 - B 和 C 在 A 之后。

我试过了

  setTimeout(main(),3000);

但是我没有输出。

function sleep(){

}

function main(){

console.log('A');

// call after 3 sec
console.log('B');


// call after 3 sec
console.log('C');

}
}
setTimeout(main , 3000);

删除函数调用“( )”

setTimeout 的工作原理: 您指定 函数 (作为第一个参数)在超时后调用(第二个参数:3000)

通常您应该将函数按名称传递给 setTimeout 函数而不调用它。

setTimeout(main,3000);

setTimeout(main(), 3000) 将立即执行 main,因为您将 () 放在它后面。只需使用名称即可。 setTimeout(main, 3000)

此外,您需要将超时设置在稍后要调用的两个特定日志语句上,而不是整个函数,或者您也可以在主函数之外记录 A,然后在之后调用主函数超时。

function main() {

  console.log('A');

  // call after 3 sec
  setTimeout(() => {
    console.log('B');
    console.log('C');
  }, 3000);

}

main();

您正在调用 setTimeout 的第一个参数中的函数。它应该是一个回调函数(函数定义)。把main函数的代码复制到setTimeout函数里面就可以了

setTimeout函数通常使用两个参数。

  1. 回调函数
  2. 时间(以毫秒为单位)

回调函数在给定时间(第二个参数)后调用。

它是这样叫的:

const callbackFunction = () =>{
   console.log("Inside callback");
}

setTimeout(callbackFunction, 2000);

或者干脆

setTimeout(() =>{
   console.log("Inside callback");
}, 2000);

输出(2 秒后)

Inside callback

试试这个

    setTimeout(main,3000);

  function main(a){
  
      console.log('A');
  
      setTimeout(function(){ 
        console.log('B'); 

        setTimeout(function(){ 
          console.log('C'); 
        }, 3000);

      }, 3000);
   
  }

以上输出也可以使用 async-await 重现:

function sleep(time) {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve("");
    }, time);
  });
}

async function main() {
  await sleep(0);
  console.log('A');

  // call after 3 sec
  await sleep(3000);
  console.log('B');

  // call after 3 sec
  await sleep(3000);
  console.log('C');

}
main();