2017-07-26 22 views
11

में त्रुटि संदेश के लिए कैच करने का प्रयास करें I जावास्क्रिप्ट का उपयोग कर रहा हूं और मुझे यह संदेश मिल रहा है कि मैंने इस API के लिए अपने दैनिक अनुरोध कोटा को पार कर लिया है। इस त्रुटि संदेश को कैच ब्लॉक में कैप्चर करने का कोई तरीका है, इसलिए जब मैं अपने कोटा पर जाता हूं तो मैं कोड का दूसरा टुकड़ा निष्पादित कर सकता हूं। मैंने कई समान पोस्ट देखी हैं, लेकिन कुछ भी उपयोगी नहीं रहा है। मेरा कोड यहाँ है।Google मानचित्र api

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

उत्तर

2

अद्यतन प्रति documentation के रूप में:

यदि आप प्रोग्राम (उदाहरण के लिए स्वचालित रूप से एक बीकन भेजने के लिए) एक प्रमाणीकरण विफलता का पता लगाने के लिए चाहते हैं आप कॉलबैक फ़ंक्शन तैयार कर सकते हैं। यदि निम्नलिखित वैश्विक फ़ंक्शन को परिभाषित किया गया है तो प्रमाणीकरण विफल होने पर इसे कॉल किया जाएगा। समारोह gm_authFailure() {// कोड}

यहाँ त्रुटियों कि gm_authFaliure समारोह को पकड़ने के लिए सक्षम होना चाहिए की एक list है। इसमें ओवरक्वाटामैप एरर त्रुटि का भी उल्लेख है।

documentation के अनुसार:

अगर बहुत अधिक अनुरोध एक निश्चित समय अवधि के भीतर किया जाता है, एपीआई एक OVER_QUERY_LIMIT प्रतिक्रिया कोड देता है।

तो आपको प्रतिक्रिया कोड जांचना चाहिए। यदि Google मानचित्र जावास्क्रिप्ट लाइब्रेरी प्रतिक्रिया कोड तक पहुंचने की अनुमति नहीं देती है तो मैं प्रतिक्रिया कोड प्राप्त करने के लिए एपीआई को 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>

+0

मैंने एक चर बनाने की कोशिश की है जो प्रतिक्रिया कोड को कैप्चर करता है। यह सब console.logs अपरिभाषित है। क्या आप मुझे प्रतिक्रिया कोड कैप्चर करने या फ़ंक्शन gm_authFailure() का उपयोग करने का तरीका बता सकते हैं। मैंने दोनों की कोशिश की है और मुझे कोई सफलता नहीं मिली है। – Aaron

+0

ऐसा लगता है कि gm_authFaliure फ़ंक्शन को कोई तर्क नहीं मिलता है, इसलिए आप त्रुटि के प्रकार की जांच नहीं कर सकते हैं, लेकिन आप यह सुनिश्चित कर सकते हैं कि कुछ गलत हो गया है और इसे शानदार तरीके से संभाल लें। अद्यतन उत्तर देखें। –

+0

क्या आप मुझे दिखा सकते हैं कि मेरे कोड के साथ googleMapError को कैसे एकीकृत किया जाए, मैंने कई अलग-अलग तरीकों की कोशिश की है और उनमें से कोई भी काम नहीं करता – Aaron

-1

हां, JavaScript supports try-catch blocks। यहाँ अपने कोड के लिए एक नमूना दिया गया है:

(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'])); 
+0

मैंने पहले से ही var map = new google.maps.Map (तत्व, विकल्प) के चारों ओर पकड़ने की कोशिश की है। यह – Aaron

+1

काम नहीं करता है क्या आप _how_ के बारे में कुछ और विवरण प्रदान कर सकते हैं, यह एक विशिष्ट त्रुटि संदेश की तरह काम नहीं करता है? –

+0

कोशिश पकड़ने काम नहीं किया। कोई विशिष्ट त्रुटि संदेश नहीं था। कोशिश पकड़ने ने – Aaron

0

गूगल प्रलेखन के अनुसार।

यदि आप उपयोग सीमाओं को पार करते हैं तो आपको एक प्रतिक्रिया के रूप में एक OVER_QUERY_LIMIT स्थिति कोड प्राप्त होगा।

इसका मतलब है कि वेब सेवा सामान्य प्रतिक्रिया प्रदान करना बंद कर देगी और अधिक उपयोग को फिर से अनुमति देने तक केवल स्थिति कोड OVER_QUERY_LIMIT लौटने पर स्विच करेगा। ऐसा हो सकता है:

  • कुछ सेकंड के भीतर, यदि त्रुटि प्राप्त हुई थी क्योंकि आपके एप्लिकेशन ने प्रति सेकंड बहुत से अनुरोध भेजे थे।

  • अगले 24 घंटों के भीतर, यदि त्रुटि प्राप्त हुई क्योंकि आपके एप्लिकेशन ने प्रति दिन बहुत से अनुरोध भेजे हैं। दैनिक कोटा
    मध्यरात्रि, प्रशांत समय पर रीसेट कर रहे हैं।

this लिंक देखें। यह मददगार होगा।