मैं जेएस में एक नौसिखिया हूं और मुझे यह समझने में कठिनाई हो रही है कि मेरे संस्करण का आउटपुट "अपरिभाषित" क्यों है। मेरा जेएस एक JSON फ़ाइल डाउनलोड करने के लिए एक GET चलाता है और एक फ़ंक्शन के साथ, मैं फ़ाइल को पढ़ने और पहली पंक्ति वापस करने का प्रयास कर रहा हूं:

invest.stock('APPLE', function (err, data) {
      if (err) { console.log('ERROR', err); return; }
      var APPLE_price = data.order[0]['price'];
      console.log(APPLE_price); //until here works fine
});
    console.log(APPLE_price); //output "Undefined" var

मैंने पहले var घोषित करने का प्रयास किया, मैंने var प्रतीक्षा करने के लिए एक कथन बनाया (क्योंकि एक एसिंक फ़ंक्शन था) लेकिन कुछ भी काम नहीं करता है।

0
Felipe Costa Goes 28 मार्च 2018, 03:48

4 जवाब

सबसे बढ़िया उत्तर

पहले फ़ंक्शन के बाहर चर घोषित करें:

var APPLE_price;
invest.stock('APPLE', function (err, data) {
  if (err) { console.log('ERROR', err); return; }
  APPLE_price = data.order[0].price;
  console.log(APPLE_price); //until here works fine
});
setTimeout(() => console.log(APPLE_price), 2000);

लेकिन कॉलबैक या वादा का उपयोग करना कहीं अधिक सुरुचिपूर्ण होगा:

function getApplePrice() {
  return new Promise((resolve, reject) => {
    invest.stock('APPLE', function(err, data) {
      if (err) {
        reject(err);
        return;
      }
      resolve(data.order[0].price);
    });
  });
}
getApplePrice().then(applePrice => {
  console.log('applePrice is ' + applePrice);
})
2
CertainPerformance 28 मार्च 2018, 00:51

वर APPLE_price = data.order[0]['price'];

यहाँ, APPLE_price एक स्थानीय चर (फ़ंक्शन-लेवल स्कोप) है। जैसा कि एक समारोह के भीतर घोषित किया जाता है। इसलिए, केवल उस फ़ंक्शन के भीतर या उस फ़ंक्शन के अंदर फ़ंक्शन द्वारा ही पहुँचा जा सकता है।

यदि आप किसी फ़ंक्शन के बाहर APPLE_price तक पहुंच चाहते हैं, तो आपको इसे फ़ंक्शन के बाहर घोषित करना होगा।

var APPLE_price;
invest.stock('APPLE', function (err, data) {
      if (err) { console.log('ERROR', err); return; }
      APPLE_price = data.order[0]['price'];
      console.log(APPLE_price); // value of data.order[0]['price']
});
    console.log(APPLE_price); // value of APPLE_price under invest.stock function.
0
Rohit Jindal 28 मार्च 2018, 07:03

यहां मुद्दा गुंजाइश है।

चूंकि APPLE_PRICE का दायरा उस फ़ंक्शन तक सीमित है, जो आप में है, इसे फ़ंक्शन के बाहर एक्सेस नहीं किया जा सकता है। लेकिन जावास्क्रिप्ट में वेरिएबल स्कोपिंग पर कुछ ट्यूटोरियल पढ़ना सबसे अच्छा है।

0
SharpCode 28 मार्च 2018, 00:55

आपकी समस्या यहाँ चर स्कूप है जिसे स्थानीय स्कूप कहा जाता है, आप इसका उपयोग नहीं कर सकते

var APPLE_price समारोह के बाहर

आप जावास्क्रिप्ट स्कूप के लिए यहां एक संदर्भ पा सकते हैं JavaScript स्कोप्स उसके लिए। इस स्थिति में, आप फ़ंक्शन के बाहर चर घोषित कर सकते हैं

var Name = " john";

function myFunction() {

// code here can use Name 

 }
// code here can use Name
1
ayed maissen 28 मार्च 2018, 01:24