kam*_*aci 3 javascript callback angularjs
我有那行代码
...
$timeout(tempFunc, $scope.sync.getDelay());
...
Run Code Online (Sandbox Code Playgroud)
在我的临时函数中,我在最后有这行代码:
$scope.sync.releasePrivilege();
Run Code Online (Sandbox Code Playgroud)
一切都运作良好.但是,当我尝试:
...
$timeout(tempFunc, $scope.sync.getDelay());
$scope.sync.releasePrivilege();
...
Run Code Online (Sandbox Code Playgroud)
它没有.我认为我应该将该行作为回调函数写入超时.我不想在我的代码中更改最近的函数我可以编辑那些行.
有任何想法吗?
PS:问题在于:
$ scope.sync.releasePrivilege();
超时后没有运行,它会立即运行.
Jos*_*ler 14
$timeout是setTimeout测试期间被嘲笑的包装器.@MarkRajcok完全正确地说为什么使用它作为阻塞方法不起作用.Mark的解决方案也可以解决您的问题.但如果重新定位代码是不可行的,那么仍有好消息!
$timeout返回一个promise(请参阅参考资料$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.");
Run Code Online (Sandbox Code Playgroud)
如果你喜欢,这应该工作得很好.它仍然没有阻止.它只是确保只有在解析了promise之后才then执行调用中的函数,即仅在超时完成且调用了方法时才执行.
此外,如果需要,您的函数可以返回数据.因此,如果tempFunc返回一个表示成功的布尔值,您也可以访问它:
$timeout( tempFunc, $scope.sync.getDelay() ).then( function( result ) {
if ( result ) {
$scope.sync.releasePrivilege();
} else {
// handle the error
}
});
Run Code Online (Sandbox Code Playgroud)
有很多的欣喜.好极了.
就像一个注释:在浏览器中进行睡眠会非常糟糕 - 它会锁定UI.异步执行是使Web成为一个很棒的平台的原因!