当你有多个时,执行$ timeout回调执行的顺序

时间:2015-12-14 20:26:22

标签: angularjs timeout

如果我在一个函数中一个接一个地有2个$ timeout,我是否可以确定在$ timeout2' s回调之前会调用$ timeout1的回调?

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

    //some other procesing

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

在timeout2s回调之前是否会调用timeout1s回调?为什么或为什么不呢?

3 个答案:

答案 0 :(得分:1)

$timeoutsetTimeout的角度包装器。所以你的问题可能与此有关: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(),但两者都将等待下一个摘要周期的开始。