【发布时间】:2014-11-20 15:35:44
【问题描述】:
我有以下代码,我尝试使用 Google Maps Geocoding API 将 businesses 数组中的 10-15 个地址列表转换为 lat/lng 坐标。
var geocoder = new google.maps.Geocoder();
var proms = businesses.map(function(address) {
return prom = new Promise(function(resolve) {
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) {
setTimeout(function() {
//HOW DO I RE-RUN THIS "new Promise"?
}, 1000);
} else {
console.log(status + ': ' + results);
}
});
});
});
Promise.all(proms);
问题是 Google 的 API 有时会返回 OVER_QUERY_LIMIT 错误,所以我想知道是否有办法重新运行几秒钟后失败的承诺。在上面的示例中,else if 语句捕获了错误,那么如何让它在超时后重新运行?
请注意,我刚刚开始使用 Promise,还没有很好地理解它们是如何工作的,所以我的方法可能完全错误。此外,所有这些都是在假设 Google 的 API 不允许我批量解析地址的情况下完成的,如果不是这样 - 请告诉我。
【问题讨论】:
标签: javascript promise google-geocoding-api