मैं भौगोलिक स्थान एपीआई से उपयोगकर्ता के देशांतर और अक्षांश को वापस करने की कोशिश कर रहा हूं लेकिन अब तक जब मैं उन्हें फ़ंक्शन के बाहर उपयोग करने का प्रयास करता हूं तो मुझे त्रुटियां मिलती रहती हैं।

मैंने फ़ंक्शन के भीतर मानों का उपयोग करने का प्रयास किया है और वे काम करते हैं लेकिन मैं उन्हें स्थिति फ़ंक्शन के बाहर काम करने के लिए प्रतीत नहीं कर सकता। मुझे "स्थान" ऑब्जेक्ट को अन्य कार्यों के लिए सुलभ बनाने का एक तरीका चाहिए।

window.navigator.geolocation.getCurrentPosition(
  position => {
    const location = {
      lat:position.coords.latitude,
      long:position.coords.longitude
    }
    return location
  },
  (err)=>console.log(err),

);
console.log(location)

मैं स्थिति फ़ंक्शन के भीतर स्थित "स्थान" ऑब्जेक्ट के अंदर कोड प्राप्त करने की अपेक्षा करता हूं। कृपया मदद करें

0
tyjanii hassan 7 सितंबर 2019, 03:05
getCurrentPosition अतुल्यकालिक है, और location चर केवल getCurrentPosition कॉलबैक के अंदर परिभाषित किया गया है ...
 – 
Jaromanda X
7 सितंबर 2019, 03:16
1
location वैरिएबल उस दायरे में मौजूद नहीं है, आपको हमेशा नवीनतम मान तक पहुंचने के लिए getCurrentPosition पर कॉलबैक फ़ंक्शन पास करना चाहिए। यह लाइव उदाहरण देखें: codesandbox.io/s/geolocation-callback-81oj7 और साथ ही MDN दस्तावेज़ देखें: developer.mozilla.org/en-US/ डॉक्स/वेब/एपीआई/…
 – 
Kaio Duarte
7 सितंबर 2019, 03:17

2 जवाब

आप अपने फ़ंक्शन को Promise के अंदर लपेट सकते हैं और प्रतीक्षा करें इसे हल करने के लिए। इस तरह आप then विधि का उपयोग करके जब भी वे उपलब्ध हो जाते हैं, तो आप मान निकाल सकते हैं। यह कॉलबैक जोड़ने के समान है लेकिन यह अलग तरह से काम करता है।

तो यहां नीचे दिया गया कोड सुरक्षा कारणों से SO पर यहां निष्पादित नहीं होता है, लेकिन यह आपकी अपनी फाइल में होगा।

Promise 2 पैरामीटर के साथ कॉलबैक फ़ंक्शन ले सकता है। resolve और reject

resolve को return जैसा कुछ देखा जा सकता है। लेकिन मूल्य वापस करने के बजाय यह इसे Promise में संग्रहीत करता है और Promise की स्थिति को resolved में बदल देता है। जब ऐसा होता है तो सभी आसन्न then विधियों को बुलाया जाएगा।

reject तब होता है जब कोई त्रुटि होती है या आप नहीं चाहते कि Promise से resolve। यह Promise स्टेटमेंट के बाद आसन्न catch ब्लॉक को कॉल करता है।

then और catch ब्लॉक में आप अपने resolved या rejected मानों तक पहुंच सकते हैं।

इस मध्यम लेख में और उदाहरण देखें .

/**
 * Wrap function in a Promise.
 * Resolve when position is found.
 * Reject when error occurs.
 */
const getLocation = () => new Promise(
  (resolve, reject) => {
    window.navigator.geolocation.getCurrentPosition(
      position => {
        const location = {
          lat:position.coords.latitude,
          long:position.coords.longitude
        };
        resolve(location); // Resolve with location. location can now be accessed in the .then method.
      },
      err => reject(err) // Reject with err. err can now be accessed in the .catch method.
    );
  }
);

/**
 * then is called when the Promise is resolved
 * catch is called when the Promise rejects or encounters an error.
 */
getLocation()
    .then(location => console.log(location))
    .catch(error => console.log(error));
0
Emiel Zuurbier 7 सितंबर 2019, 04:14

HTML5 API getcurrentPosition assync है, स्थान का उपयोग करने का सबसे आसान तरीका कॉलबैक फ़ंक्शन का उपयोग करना है, जैसे:

window.navigator.geolocation.getCurrentPosition(
  position => {
    const location = {
      lat:position.coords.latitude,
      long:position.coords.longitude
    }
    showLocation(location); // <- Function that will use location data
  },
  (err)=>console.log(err),

);
function showLocation(location) {
    console.log(location);
    //other stuff    
}

यह लिंक बेहतर ढंग से समझने में मदद कर सकता है: https://developer.mozilla.org/en-US/docs/Glossary/ कॉलबैक_फंक्शन

0
Adépòjù Olúwáségun 7 सितंबर 2019, 06:54