如何从javascript中删除异步?

时间:2017-12-20 11:54:24

标签: javascript asynchronous

对于一般性问题,我很抱歉,但我真的希望能够处理这个问题。

我习惯于编写实时Java或PHP语言,程序逐行执行,但有时我会使用javascript,因为它有很好的库。

异步的东西让我疯狂。

document.body.innerHTML = "";
for(var i=0;i<3;i++){
    document.body.innerHTML+="Hi! ";
    alert();
}

我希望这段代码能够像这样工作:

  1. 删除&#34; body&#34;的全部内容标签
  2. 打印&#34;嗨! &#34;
  3. 调用警报。
  4. 打印&#34;嗨! &#34;
  5. 调用提醒
  6. 打印&#34;嗨! &#34;
  7. 调用警报。
  8. 实际上它的工作原理如下:

    1. 调用提醒
    2. 调用提醒
    3. 调用提醒
    4. 删除&#34;正文标记&#34;。
    5. 的全部内容
    6. 打印&#34;嗨! &#34;
    7. 打印&#34;嗨! &#34;
    8. 打印&#34;嗨! &#34;
    9. 如何让javascript代码像普通程序一样?

      谢谢!

      更新:

      第一个重复建议根本不重复。它有完全不同的代码(我甚至不使用setTimeout),不同的任务和不同的解释。即使我的问题的答案隐藏在某处(在评论编号56或类似的东西),它是如此不清楚,不应被视为重复。

      第二个重复建议中的选定解决方案根本不起作用:

      function b(){
          document.body.innerHTML = ""; for(var i=0;i<3;i++){ 
              document.body.innerHTML+="Hi! ";
              alert();
          }
      }
      function c(){
          setTimeout(b, 1);
      };
      c();
      

      所以不,这些链接都不是重复的。

1 个答案:

答案 0 :(得分:0)

您可以尝试这样的事情:

document.body.innerHTML = "";

function update() {
  document.body.innerHTML += "Hi! ";
  alert();
}
for (var i = 0; i < 3; i++) {
  setTimeout(update, 0);
}

编辑: 有点难看,但这应该做的工作

let i = 0;
document.body.innerHTML = "";
requestAnimationFrame(function next() {
  document.body.innerHTML += "Hi! ";
  i++;
  setTimeout(function() {
    alert();
    if (i < 3) {
      requestAnimationFrame(next);
    }
  }, 0)
})