web-dev-qa-db-fra.com

Essayez Catch pour le message d'erreur dans google maps api

J'utilise javascript et je reçois un message indiquant que j'ai dépassé mon quota de requêtes quotidiennes pour cette API. Existe-t-il un moyen de capturer ce message d'erreur dans un bloc catch try afin que, lorsque je dépasse mon quota, je puisse exécuter un autre morceau de code. J'ai vu plusieurs articles similaires, mais rien de ce qui a été utile. Voici mon code.

(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']));
12
Aaron

Mise à jour Selon le documentation :

si vous souhaitez détecter par programme un échec d'authentification (par exemple, envoyer automatiquement une balise), vous pouvez préparer une fonction de rappel. Si la fonction globale suivante est définie, elle sera appelée en cas d'échec de l'authentification. fonction gm_authFailure () {// code}

Voici une liste d'erreurs que la fonction gm_authFaliure devrait pouvoir détecter. Il mentionne également une erreur OverQuotaMapError.

Selon le documentation :

si trop de demandes sont effectuées au cours d'une certaine période, l'API renvoie un code de réponse OVER_QUERY_LIMIT. 

Donc, vous devriez vérifier le code de réponse. Si la bibliothèque JavaScript de Google Maps ne permet pas d'accéder au code de réponse, je vous recommande de faire une requête HTTP à l'API pour obtenir le code de réponse.

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>

7
Lucky Soni

Selon la documentation google.

Si vous dépassez les limites d'utilisation, vous obtiendrez le statut OVER_QUERY_LIMIT code comme une réponse.

Cela signifie que le service Web cessera de fournir des réponses normales et passez à renvoyer uniquement le code d'état OVER_QUERY_LIMIT jusqu'à ce que plus l'utilisation est à nouveau autorisée. Cela peut arriver:

  • En quelques secondes, si l'erreur a été reçue car votre application a envoyé trop de demandes par seconde.

  • Si l'erreur survient dans les 24 heures, votre application a envoyé trop de demandes par jour. Les quotas quotidiens sont
    réinitialiser à minuit, heure du Pacifique.

S'il vous plaît se référer this link. Ce serait utile.

0
Ravi Rupeliya