Я создал рекурсивный вызов функции в AngularJS и просто интересно, есть ли лучший способ решить эту проблему?
Мой код выглядит следующим образом:
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;
}
Вы бы не просто поместить 'отложила. разрешить' звонок ** внутри ** таймаут? – adeneo
Уже пробовал это раньше, но не решил мою проблему и не стал ждать. – Embrioka
Задержка в миллисекундах. вы увеличиваете порядок на 100 мс, попробуйте использовать его в секундах (умножение 1000). [Обратитесь к документам] (https://docs.angularjs.org/api/ng/service/$timeout) – Mahesh