I have the following controller:
myApp.controller('myCtrl', ['$scope', '$rootScope', '$location', 'myService',
function($scope, $rootScope, $location, myService) {
$scope.myArray = [];
$scope.myFunction = function() {
if (something) {
setTimeout(function(){
$scope.myFunction();
},500);
} else {
var itm = $rootScope.var;
for (var i in itm) {
if (itm.hasOwnProperty(i)) {
$scope.myArray.push(itm[i].value);
}
}
// first console.log
console.log($scope.myArray);
}
}
$scope.myFunction();
// second console.log
console.log($scope.myArray);
}
]);
In the example above the second console.log gets printed before the first one. Why is this the case? Is there a way to make the controller wait for the function to be executed/returned and only after that proceed to execute the rest of the code?
$scopehere. A plunkr/codepen would definitely help debug what you're seeing as it is more than likely a logic glitch. Also, if you are ever doing something with a scope that you want to propagate, make sure you never usesetTimeoutor pure callbacks without using$scope.apply().bind(). So you could do something likefunction(){}.bind($scope)and then within function usethis.myArrayinstead.$timeoutinstead ofsetTimeout.