$timeout
setTimeout
是一个在测试期间被嘲笑的包装器。@MarkRajcok 关于为什么将其用作阻塞方法不起作用是完全正确的。马克的解决方案也可以解决您的问题。但是,如果重新定位您的代码不可行,那么仍然有好消息!
$timeout
返回一个承诺(请参阅 参考资料$q
),因此您实际上可以将您想要的内容链接在一起:
$timeout( tempFunc, $scope.sync.getDelay() ).then( function() {
console.log("I'm called only after the timeout.");
$scope.sync.releasePrivilege();
});
console.log("But I get called immediately.");
如果您愿意,这应该可以正常工作。它仍然没有阻塞。它只是确保then
调用中的函数仅在 promise 解决后才执行,即仅在超时完成并且您的方法已被调用时才执行。
此外,如果需要,您的函数可以返回数据。因此,如果tempFunc
返回一个表示成功的布尔值,您也可以访问它:
$timeout( tempFunc, $scope.sync.getDelay() ).then( function( result ) {
if ( result ) {
$scope.sync.releasePrivilege();
} else {
// handle the error
}
});
有很多的欣喜。耶。
就像一个注释:在浏览器中睡眠会非常糟糕 - 它会锁定 UI。异步执行使 Web 成为一个很棒的平台!