Monday, May 20, 2024
 Popular · Latest · Hot · Upcoming
188
rated 0 times [  190] [ 2]  / answers: 1 / hits: 17362  / 12 Years ago, mon, february 18, 2013, 12:00:00

I have that line of codes



...
$timeout(tempFunc, $scope.sync.getDelay());
...


at my temp function I have that line of code at end:



$scope.sync.releasePrivilege();


and everything works well. However when I try:



...
$timeout(tempFunc, $scope.sync.getDelay());
$scope.sync.releasePrivilege();
...


It doesn't. I think that I should write that line as a callback function into timeout. I don't want to change recent functions at my code I can just edit that lines.



Any ideas?



PS: The problem is that:




$scope.sync.releasePrivilege();




is not running after timeout, it immediately runs.


More From » callback

 Answers
6

$timeout is a wrapper for setTimeout that gets mocked out during testing. @MarkRajcok is completely right about about why using it as a blocking method doesn't work. Mark's solution would also solve your issue. But if it's not feasible to relocate your code, there is still good news!



$timeout returns a promise (see $q), so you can actually just chain together what you want:



$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.);


And this should work just fine, should you fancy. It still doesn't block. It just ensures that the function within the then call is executed only after the promise is resolved, that is only when the timeout has completed and your method has been called.



Additionally, your function can return data, if needed. So if tempFunc returned a Boolean value that indicated success, you could also access it:



$timeout( tempFunc, $scope.sync.getDelay() ).then( function( result ) {
if ( result ) {
$scope.sync.releasePrivilege();
} else {
// handle the error
}
});


And there was much rejoicing. Yay.






Just as a note: doing a sleep in a browser would be very bad - it'd lock the UI. Asynchronous execution is what makes the web an awesome platform!


[#80149] Sunday, February 17, 2013, 12 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
annie

Total Points: 483
Total Questions: 97
Total Answers: 107

Location: Belarus
Member since Sat, Jul 18, 2020
4 Years ago
;