что вызывать в этом таймере?
resolve или reject в зависимости от результата. Можно сделать так:
function getAddressLocation (address, repeat) {
repeat = repeat !== false;
return new Promise(function(resolve, reject) {
geocoder.geocode({
address: address
}, function(results, status) {
if (status === google.maps.GeocoderStatus.OK) {
resolve({
results: results,
business: address
});
} else if (status === google.maps.GeocoderStatus.OVER_QUERY_LIMIT && repeat) {
setTimeout(function() {
getLocationAddress(address, false).then(resolve, reject);
}, 1000);
} else {
reject(status)
}
});
})
}
Но лучше изначально сделать какую-то очередь, и выполнять не сразу по требованию а в порядке очереди + вроде как вам в заголовках должны предоставлять информацию о количестве запросов которое вам позволено делать. Ну это так, для оптимизации всего этого добра. Ида - промисы можно чейнить, можно выстраивать цепочки. вклиниваться туда и т.д.