相关疑难解决方法(0)

在通过 setTimeout 或 Promise 阻止代码之前更新 DOM

我知道,当存在 CPU 密集型代码时,任何先前的 DOM 更新都不会发生。例如

function blockFor(dur){
  var now = new Date().getTime();
  while (new Date().getTime() < now + dur);
  result.textContent = "I am done..!";
}

result.textContent = "Please remain..."; // we will never see this
blockFor(2000);
Run Code Online (Sandbox Code Playgroud)
<p id="result"></p>
Run Code Online (Sandbox Code Playgroud)

但是,如果我将 CPU 密集型代码转移到异步时间线,那么setTimeout一切都很好,如以下代码片段所示。

function blockFor(dur){
  var now = new Date().getTime();
  while (new Date().getTime() < now + dur);
  result.textContent = "I am done..!";
}

result.textContent = "Please remain..."; // now you see me
setTimeout(_ => blockFor(2000),15);      // 15ms to be on …
Run Code Online (Sandbox Code Playgroud)

javascript asynchronous settimeout promise es6-promise

5
推荐指数
1
解决办法
1534
查看次数