我正在使用javascript,并收到一条消息,指出我已超出此API的每日请求配额。 有没有办法在 try catch 块中捕获此错误消息,以便当我超过配额时,我可以执行另一段代码。 我看过几篇类似的帖子,但没有一个有帮助。 这是我的代码。
(function (window, google, lat, lng) {
var options = {
center: {
lat: Number(lat),
lng: Number(lng)
},
zoom: 5,
disableDefaultUI: true,
scrollwheel: true,
draggable: false
},
element = document.getElementById('map-canvas')
var map = new google.maps.Map(element, options)
}(window, window.google, result[i]['latitude'], result[i]['longitude']));
根据文档更新:
如果要以编程方式检测身份验证失败(例如自动发送信标(,则可以准备回调函数。如果定义了以下全局函数,则在身份验证失败时将调用该函数。函数 gm_authFailure(( {//code}
下面是 gm_authFaliure 函数应该能够捕获的错误列表。它还提到了OverQuotaMapError错误。
根据文档:
如果在某个时间段内发出了太多请求,API 将返回OVER_QUERY_LIMIT响应代码。
因此,您应该检查响应代码。如果谷歌地图javascript库不允许访问响应代码,那么我建议向API发出HTTP请求以获取响应代码。
function initMap(window, google, lat, lng) {
var options = {
center: {
lat: Number(lat),
lng: Number(lng)
},
zoom: 5,
disableDefaultUI: true,
scrollwheel: true,
draggable: false
},
element = document.getElementById('map-canvas'),
map = new google.maps.Map(element, options);
};
function googleMapsCustomError(){
alert('Google Maps custom error triggered');
}
// if you want to respond to a specific error, you may hack the
// console to intercept messages.
// check if a message is a Google Map's error message and respond
// accordingly
(function takeOverConsole() { // taken from http://tobyho.com/2012/07/27/taking-over-console-log/
var console = window.console
if (!console) return
function intercept(method) {
var original = console[method]
console[method] = function() {
// check message
if(arguments[0] && arguments[0].indexOf('OverQuotaMapError') !== -1) {
googleMapsCustomError();
}
if (original.apply) {
// Do this for normal browsers
original.apply(console, arguments)
} else {
// Do this for IE
var message = Array.prototype.slice.apply(arguments).join(' ')
original(message)
}
}
}
var methods = ['error']; // only interested in the console.error method
for (var i = 0; i < methods.length; i++)
intercept(methods[i])
}())
<!DOCTYPE html>
<div id="map-canvas"></div>
<script>
// Notice i am defining this within my html file, just to be sure that this function exists before the Google Maps API is loaded.
window.gm_authFailure = function() {
// remove the map div or maybe call another API to load map
// maybe display a useful message to the user
alert('Google maps failed to load!');
}
window.showMap = function() {
var lat = -34.397,
lng = 150.644;
initMap(window, window.google, lat, lng);
};
</script>
<!-- We are passing an invalid API key. Also notice that we have defined 'callback' as 'showMap' which means that when the Google API JavaScript library is finished loading it will call the 'showMap' function. -->
<script src="https://maps.googleapis.com/maps/api/js?key=INVALID_API_KEY&callback=showMap"
async defer></script>
是的,JavaScript 支持 try-catch 块。下面是代码的示例实现:
(function (window, google, lat, lng) {
var options = {
center: {
lat: Number(lat),
lng: Number(lng)
},
zoom: 5,
disableDefaultUI: true,
scrollwheel: true,
draggable: false
},
element = document.getElementById('map-canvas')
try {
var map = new google.maps.Map(element, options)
} catch (error) {
// handle error
console.log(error.message);
} finally {
// optional cleanup code
}
}(window, window.google, result[i]['latitude'], result[i]['longitude']));
根据谷歌文档。
如果超出使用限制,您将获得OVER_QUERY_LIMIT状态 代码作为响应。
这意味着 Web 服务将停止提供正常响应 并切换到仅返回状态代码OVER_QUERY_LIMIT直到更多 允许再次使用。这可能会发生:
在几秒钟内,如果由于应用程序每秒发送的请求过多而收到错误。
在接下来的 24 小时内,如果由于应用程序每天发送的请求过多而收到错误。每日配额在太平洋时间午夜
重置。
请参考此链接。这将是有帮助的。