Мне нужно вернуть значения переменных из функции для использования в конвертации валюты - PullRequest
0 голосов
/ 29 сентября 2019

Мне нужно вернуть значения переменных из функции для использования при конвертации валюты. Я получаю информацию о курсе трех валют с веб-сайта Банка Украины.

Я уже получаю данные из функции, но не могу использовать их в других. Я хочу сделать конвертер валют и чтобы не делатьзапрос снова, я хочу использовать их.

Я не знаю, куда написать return. Более того, у функции есть функция, проблема в том, можете ли вы подсказать, как ее обрабатывать.

Ссылка на сайт есть, но она на украинском языке https://yurakhomitsky.github.io/exchange%20rates/

var URItwo=`https://bank.gov.ua/NBUStatService/v1/statdirectory/exchange?json`;
const XHR=new XMLHttpRequest();
 window.addEventListener("load",checkrate(),false);

function checkrate(e){

	XHR.addEventListener("readystatechange",function(){
		
	if((XHR.readyState===4) && (XHR.status===200)){
			var resultwo=JSON.parse(XHR.responseText);
           	console.log(resultwo);
           	for(var key in resultwo){
           		if (resultwo[key].cc=="USD") {
           			 rateone.innerHTML=resultwo[key].txt +` `+resultwo[key].rate.toFixed(2)+`грн`;
           			cursUSD=resultwo[key].rate.toFixed(2);
           			console.log(cursUSD);
           		}
           		else if (resultwo[key].cc=="EUR") {
           			 ratetwo.innerHTML=resultwo[key].txt +` `+resultwo[key].rate.toFixed(2)+`грн`;
           			cursEUR=resultwo[key].rate.toFixed(2);
           			 console.log(cursEUR);
           		}
           		else if (resultwo[key].cc=="PLN") {
           			 ratetree.innerHTML=resultwo[key].txt +` `+resultwo[key].rate.toFixed(2)+`грн`;
           			cursPLN=resultwo[key].rate.toFixed(2);
           			console.log(cursPLN);
           			
           		}
           	}
  	 }
  
}, false);
    
XHR.open("GET",URItwo,true);
XHR.send();
 
}

1 Ответ

0 голосов
/ 29 сентября 2019

Чтобы не делать запрос снова, вы можете сохранить ответ в некоторой глобальной переменной, чтобы он был доступен из требуемых методов.

function fetchExchangeRateData(callback){
    const URItwo=`https://bank.gov.ua/NBUStatService/v1/statdirectory/exchange?json`;
    const XHR=new XMLHttpRequest();
    XHR.open("GET",URItwo,true);
    XHR.onreadystatechange = function () { 
      if(XHR.readyState === 4 && XHR.status === 200){
            var resultwo=JSON.parse(XHR.responseText);
            console.log(resultwo);
            callback(resultwo, null);
       } else {
         callback(null, XHR.statusText); // return error
       }
    }
    XHR.send(); 
}

function manipulateDom(resultwo, error) {
  for(var key in resultwo){
   if (resultwo[key].cc=="USD") {
    rateone.innerHTML=resultwo[key].txt +` `+resultwo[key].rate.toFixed(2)+`грн`;
    cursUSD=resultwo[key].rate.toFixed(2);
    console.log(cursUSD);
   }
   else if (resultwo[key].cc=="EUR") {
    ratetwo.innerHTML=resultwo[key].txt +` `+resultwo[key].rate.toFixed(2)+`грн`;
    cursEUR=resultwo[key].rate.toFixed(2);
    console.log(cursEUR);
   }
   else if (resultwo[key].cc=="PLN") {
    ratetree.innerHTML=resultwo[key].txt +` `+resultwo[key].rate.toFixed(2)+`грн`;
    cursPLN=resultwo[key].rate.toFixed(2);
    console.log(cursPLN);

   }
  }
}

function onLoad() {
  // you can use async and await keywords (Promises) of ES6 instead of callback.
  fetchExchangeRateData(function(data){
    // store data in some variable to use it in other function.
    manipulateDom(data);
    ...
    someOtherMethod(data);
  }); 
}

window.onload = onLoad;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...