如果函数中有2个$timeout,我能确定$timeout1的回调将在$timeout2的回调之前调用吗?
function tempFunction() {
$timeout(function() {
//timeout 1s callback code
});
//some other procesing
$timeout(function() {
//timeout 2s callback code
});
}
timeout1s回调是否在timeout2s回调之前被调用?为什么?
$timeout
是setTimeout
的angular包装器。所以您的问题可能与此有关:具有相同间隔的多个setTimeout()函数的执行顺序。
从规格来看,订单似乎应该得到保证,但这可能取决于环境。即使对于不同(但相近)的延迟值,也有一些随机结果的例子。
对我来说,要确定(并且与浏览器无关),最好的方法是将这些调用(已经在另一个答案中描述)链接起来,就像您想要确保顺序的任何其他异步内容一样。
$timeout
返回一个promise。你可以把它们串起来。
var p1 = $timeout(fn1);
var p2 = p1.then(function(){
return $timeout(fn2);
};
除此之外,$timeout还有第三个可选参数,它是一个布尔值,允许您指定是否调用$apply()。默认情况下为true。
因此,cb1将在cb2之前执行,因为它将首先调用$apply(),但两者都将等待下一个摘要周期的开始。