2015-12-14 25 views
0

如果我有2 $超時了一個又一個的功能,我可以肯定知道的是,$ TIMEOUT1的回調將$ timeout2的回調之前調用?

function tempFunction() { 
    $timeout(function() { 
     //timeout 1s callback code 
    }); 

    //some other procesing 

    $timeout(function() { 
     //timeout 2s callback code 
    }); 
} 

是否在timeout2s回調之前調用timeout1s回調函數?爲什麼或者爲什麼不?

回答

1

$timeoutsetTimeout角的包裝。所以你的問題可以與此相關:Execution order of multiple setTimeout() functions with same interval

從規範那裏看起來應該保證順序,但它可以取決於環境。即使對於不同(但接近)的延遲值,也有一些隨機結果的例子。

對我來說,可以肯定的(並且獨立於瀏覽器),最好的辦法是對那些呼叫(在另一個答案已經描述)像其他任何異步的東西,你要保證的順序鏈。

0

$timeout返回承諾。你可以鏈接它們。

var p1 = $timeout(fn1); 

var p2 = p1.then(function(){ 
      return $timeout(fn2); 
     }; 
+0

謝謝@georgeawg。雖然有幫助,但這不能回答我的問題。 – neuDev33

0

由於this人所指出的,在$超時確保回調被稱爲下一個消化週期的開始。現在,當回調是唯一傳遞的參數時,這就是所有的函數。使用$ timeout和附加的int參數($ timeout(function(){...},integer))將在執行回調之前等待下一個摘要循環和指定的毫秒數。

除此之外$超時需要一個第三個可選參數,它是一個布爾值,它允許您指定是否$適用()被調用。這默認爲true。

因爲這CB1將CB2)之前先執行,因爲它會調用$應用(,但雙方會等待下一次消化週期的開始。