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



如果函数中有2个$timeout,我能确定$timeout1的回调将在$timeout2的回调之前调用吗?

function tempFunction() {
    $timeout(function() {
        //timeout 1s callback code
    });
    //some other procesing
    $timeout(function() {
        //timeout 2s callback code
    });
}

timeout1s回调是否在timeout2s回调之前被调用?为什么?

$timeoutsetTimeout的angular包装器。所以您的问题可能与此有关:具有相同间隔的多个setTimeout()函数的执行顺序。

从规格来看,订单似乎应该得到保证,但这可能取决于环境。即使对于不同(但相近)的延迟值,也有一些随机结果的例子。

对我来说,要确定(并且与浏览器无关),最好的方法是将这些调用(已经在另一个答案中描述)链接起来,就像您想要确保顺序的任何其他异步内容一样。

$timeout返回一个promise。你可以把它们串起来。

var p1 = $timeout(fn1);
var p2 = p1.then(function(){
             return $timeout(fn2);
         };
正如此人所指出的,$timeout确保在下一个摘要周期开始时调用回调。现在,当回调是唯一传递的参数时,这个函数所做的就是这些。将$timeout与额外的int参数($timeout(function(){…},integer))一起使用将等待下一个摘要周期和执行回调之前经过的指定毫秒。

除此之外,$timeout还有第三个可选参数,它是一个布尔值,允许您指定是否调用$apply()。默认情况下为true。

因此,cb1将在cb2之前执行,因为它将首先调用$apply(),但两者都将等待下一个摘要周期的开始。

相关内容

  • 没有找到相关文章

最新更新