setTimeout意外延迟内的控制台日志

问题描述

以下代码给出了意外的结果。它只等待1秒的延迟(而不是delayBySeconds()函数指定的5秒),然后按如下所示打印输出

function func(){
  const delaySeconds = 5;
  console.log("Alpha");
  setTimeout(()=> {console.log("Beta");},1000);
  console.log("Gamma");
  
  delayBySeconds(delaySeconds);
  console.log(`${delaySeconds} seconds passed`);
}

function delayBySeconds(sec){
  let start = Now = Date.Now();
  while((Now - start) < (sec * 1000)){
    //console.log(Now);
    Now = Date.Now();
  }
}

func();

输出

"Alpha"
"Gamma"
"5 seconds passed"
"Beta"

此外,如果在delayBySeconds()中重新激活console.log(Now),则该延迟生效,否则,“经过5秒”将在“ Gamma”之后立即打印。 另一个意外的结果是,如果我代替()=>,而只是在setTimeout()的参数中使用光秃秃的console.log(“ Beta”),则“ Beta”会在“ Gamma”之前打印。任何建议是什么原因造成的?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)