2015-12-14 22 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)之前先执行,因为它会调用$应用(,但双方会等待下一次消化周期的开始。