मैं chart.js और stocks.js स्टॉक को ग्राफ़ करने के लिए। मैं इसके लिए दो कार्यों का उपयोग करता हूं। एक जो एक बटन क्लिक करने पर प्राप्त होता है और दूसरा जो डेटा को साफ करता है और चार्ट को अपडेट करता है।

मैंने जो रेखांकन किया है उसे बदलने की कोशिश की है, इसे कैसे अपडेट किया जाता है, मैं डेटा को कैसे साफ करता हूं, साथ ही अन्य चीजों को भी बदल रहा हूं। मैं जावास्क्रिप्ट के लिए नया हूँ। जब एक HTML बटन क्लिक किया जाता है तो यह oneday फ़ंक्शन को सक्रिय करता है। मेरे पास अन्य बटन हैं जो एक ही काम करते हैं लेकिन अलग-अलग समय आदि के साथ। अभी यह काम करता है जब मैं एक बटन दबाता हूं, फिर जब मैं दूसरा दबाता हूं तो यह बदल जाता है, लेकिन तीसरे में एक्स-अक्ष अपरिभाषित है, फिर चौथा है दोनों कुल्हाड़ियों को अपरिभाषित के रूप में।

function clearwithtimes(){
        async function request(){
            var result = await stocks.timeSeries({
                symbol: stock,
                interval: interval,
                amount: time
             });
             var datesdata = result;
             for (i in datesdata){
                     //Loops through array
                 delete datesdata[i].high
                 delete datesdata[i].low
                 delete datesdata[i].close
                 delete datesdata[i].volume
                 delete datesdata[i].open
             }
             var stringeddates = JSON.stringify(datesdata);
             var step;
             stringeddates = stringeddates.replace('[{"date":"', '');
             for (step = 0; step < time; step++) {
                 stringeddates = stringeddates.replace('T', ' ');
                 stringeddates = stringeddates.replace('.000Z', '');
                 stringeddates = stringeddates.replace('",', '#');
                 stringeddates = stringeddates.replace('"},{"date":"', '#');
             }
             stringeddates = stringeddates.replace('},{"date":"', '#');
             stringeddates = stringeddates.replace('T19:00:00.000Z"}]', '');
             stringeddates = stringeddates.replace('T19:00:00.000Z"', '');
             stringeddates = stringeddates.replace('"}]', '');
             stringeddates = stringeddates.split("#");

             var result = await stocks.timeSeries({
                 symbol: stock,
                 interval: interval,
                 amount: time
                });
            for (i in result){
                    //Loops through array
                delete result[i].high
                delete result[i].low
                delete result[i].close
                delete result[i].volume
                delete result[i].date
             }
         var numberlist = JSON.stringify(result);
         var step;
         numberlist = numberlist.replace('[{"open":', '');
         for (step = 0; step < time; step++) {
         numberlist = numberlist.replace('},{"open":', '#');
     }
         numberlist = numberlist.replace('},{"open":', '#');
         numberlist = numberlist.replace('}]', '');
         numberlist = numberlist.split("#");
         finalprices = numberlist.reverse();
         finaldates = stringeddates.reverse();
         stockGraph.data.datasets[0].data = finalprices;
         stockGraph.data.labels = finaldates;
         stockGraph.update();
        }
        request();
    }
    function oneday() {
        stockform=document.getElementById("stockname");
        stock=stockform.elements["Stock"].value;
        time = 96;
        interval = '15min';
        clearwithtimes();
    }

क्या होना चाहिए जब मैं एक दिन के कार्य को कई बार सक्रिय करता हूं तो धुरी को अपरिभाषित नहीं किया जाना चाहिए।

0
Sam Schnaars 11 मई 2019, 01:50

1 उत्तर

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

आप दर सीमा के खिलाफ चल रहे हैं, और ऐसा होने पर न तो stock.js और न ही Alpha Vantage का API किसी त्रुटि की रिपोर्ट करता है। एक्सएचआर प्रतिक्रिया की जांच करें जब आपकी कुल्हाड़ी खराब हो जाए:

{
"नोट": "अल्फा वैंटेज का उपयोग करने के लिए धन्यवाद! हमारी मानक एपीआई कॉल आवृत्ति प्रति मिनट 5 कॉल और प्रति दिन 500 कॉल है। कृपया https://www.alphavantage.co/premium/ अगर आप उच्च API कॉल आवृत्ति को लक्षित करना चाहते हैं।"
}

एक नियम के रूप में, आपको दूरस्थ एपीआई को हिट करते समय एक अच्छा नागरिक बनने का प्रयास करना चाहिए, और आवश्यकता से अधिक अनुरोध नहीं करना चाहिए। आपका request() फ़ंक्शन एक ही डेटा को दो बार पकड़ लेता है, संभवतः क्योंकि आप कुछ डेटा को नष्ट कर देते हैं जिसकी आपको बाद में आवश्यकता होती है। फ़ंक्शन को दोबारा दोहराएं, और आपको केवल एक बार एपीआई को हिट करने की आवश्यकता है:

function clearwithtimes() {
  async function request() {
    const result = await stocks.timeSeries({
      symbol: stock,
      interval: interval,
      amount: time
    });

    if (result.length === 0) {
      console.log('Something went wrong!');
      return;
    }

    const finaldates = result.map(series =>
      series.date      // get the date from each series,
        .toISOString() // convert it to a string, e.g. "2019-05-11T10:10:23.323Z",
        .split('T')[0] // split it in two at the "T", and return the first half
    ).reverse();
    const finalprices = result.map(series => series.open).reverse();

    stockGraph.data.datasets[0].data = finalprices;
    stockGraph.data.labels = finaldates;
    stockGraph.update();
  }
  request();
}

एक ही रास्ता stocks.timeSeries() आपको बता सकता है कि आपने सीमा पार कर ली है, वह है एक खाली सरणी लौटाना। अपना चार्ट अपडेट करने से पहले इसकी जांच कर लें।

result.map() रिटर्न result सरणी पर आधारित एक नई सरणी, इसे संशोधित किए बिना। कच्चे JSON स्ट्रिंग्स के साथ काम करने की कोशिश करना कहीं बेहतर है।

आदर्श रूप से, आपको result के मान को कैश करना चाहिए और जब भी संभव हो उस कैश्ड मान के आधार पर अपना चार्ट अपडेट करना चाहिए।

0
AuxTaco 11 मई 2019, 10:24