I have created a recursive function call in AngularJS and just wonder if is there a better way to solve this problem? The code works perfectly.
My code is the following:
function getLocation(query, map, object, delay) {
var deferred = $q.defer();
var service = new google.maps.places.PlacesService(map);
service.textSearch({ query: query }, function (results, status) {
if (status == google.maps.places.PlacesServiceStatus.OK) {
var loc = results[0].geometry.location;
object.lang = loc.lng();
object.lat = loc.lat();
deferred.resolve(object);
} else {
if (status === "OVER_QUERY_LIMIT") {
delay += 100;
deferred.resolve($timeout(function () {
var deferred = $q.defer();
getLocation(query, map, object, delay).then(function (object) {
deferred.resolve(object);
});
return deferred.promise;
}, delay));
} else {
deferred.reject(status);
}
}
});
return deferred.promise;
}
I have already tried to replace the following section:
deferred.resolve($timeout(function () {
var deferred = $q.defer();
getLocation(query, map, object, delay).then(function (object) {
deferred.resolve(object);
});
return deferred.promise;
}, delay));
with:
$timeout(getLocation(query, map, object, delay).then(function (object) {
deferred.resolve(object);
}), delay);
but it didn't work (perform the recursive call without timeout).
Could you give me some advice to build a less ugly function to solve this recursive call?