2013-05-18 70 views
1

我試圖讓一個函數在'for'函數中顯示一些消息2秒後,但似乎沒有按順序運行,如果我設置了一個更高的值,它不會等到完成,然後才能完成下一個任務。如何讓setTimeout在開始新的之前等待完成?setTimeout不同步運行

time += 2000; 
(function(set, cName, time) { 
    if (cName == "A" || cName == "B") { 
     setTimeout(function() { 
      text.innerHTML = "somethibng <br />"+text.innerHTML; 
      set.setAttribute("class", "type"+cName);   
     }, time);  
    } else { 
     setTimeout(function() { 
      text.innerHTML = "something else <br />"+text.innerHTML; 
       set.setAttribute("class", "type"+cName);       
      }, time); 

     setTimeout(function() { text.innerHTML = "and then another text <br />"+text.innerHTML; }, time); 
       } 
})(set, cName, time); 
+0

你可以發表所有相關的代碼,包括提到的'for'嗎? –

回答

4

這是一個異步回調,從第一個回調中調用下一個setTimeout。

time += 2000; 
(function(set, cName, time) { 
    if (cName == "A" || cName == "B") { 
     setTimeout(function() { 
      text.innerHTML = "somethibng <br />"+text.innerHTML; 
      set.setAttribute("class", "type"+cName);   
     }, time);  
    } else { 
    setTimeout(function() { 
     text.innerHTML = "something else <br />"+text.innerHTML; 
      set.setAttribute("class", "type"+cName);       

     /******* call second setTimeout once the first one finished ***/ 
     setTimeout(function() { text.innerHTML = "and then another text <br />"+text.innerHTML;  }bind(<pass things to the second timeout if you need>), time); 
     /**** notice the bind, it's not mandatory (unless you pass vars to the second timeer) **/ 

     }), time); 


      } 
    })(set, cName, time); 
+0

我用'if'和'else'在第一個內部添加了第二個'setTimeout',並且以某種方式我想要的方式,但是我設置時間的方式會以某種方式可以接受的方式非常奇怪 – user2035693