如果我在一个函数中一个接一个地有2个$ timeout,我是否可以确定在$ timeout2' s回调之前会调用$ timeout1的回调?
function tempFunction() {
$timeout(function() {
//timeout 1s callback code
});
//some other procesing
$timeout(function() {
//timeout 2s callback code
});
}
在timeout2s回调之前是否会调用timeout1s回调?为什么或为什么不呢?
答案 0 :(得分:1)
$timeout
是setTimeout
的角度包装器。所以你的问题可能与此有关:Execution order of multiple setTimeout() functions with same interval。
从规范中可以看出订单应该得到保证,但它可能取决于环境。即使对于不同(但接近)的延迟值,也有一些随机结果的例子。
对我来说,确保(和浏览器独立)最好的方法是将这些调用链接起来(已在另一个答案中描述),就像你想要确保顺序的任何其他异步内容一样。
答案 1 :(得分:0)
$timeout
返回一个承诺。你可以链接它们。
var p1 = $timeout(fn1);
var p2 = p1.then(function(){
return $timeout(fn2);
};
答案 2 :(得分:0)
正如this人所指出的那样,$ timeout确保在下一个摘要周期开始时调用回调。现在,当回调是唯一传递的参数时,这就是所有这个函数。使用带有附加int参数的$ timeout($ timeout(function(){...},整数))将等待下一个摘要周期和执行回调之前经过的指定毫秒。
除了这个$ timeout之外还有第三个可选参数,它是一个布尔值,允许你指定是否调用$ apply()。默认为true。
因为这个cb1将在cb2之前执行,因为它将首先调用$ apply(),但两者都将等待下一个摘要周期的开始。