Лучший способ улучшить JS Scoping - PullRequest
0 голосов
/ 04 июля 2019

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

function loadJSON(callback) {
    var stringQuery = decodeURIComponent(window.location.search.replace(/^.*?\=/, ''));   
    var xobj = new XMLHttpRequest();
    xobj.open('GET', 'http://localhost:3000/data/?email='+stringQuery, true);
    xobj.onreadystatechange = function () {
      if (xobj.readyState == 4 && xobj.status == "200") {
      callback(JSON.parse(xobj.responseText));
      }
    };
    xobj.send(null);  
  };
function gettingReportbyEmail(){
    var stringQuery = decodeURIComponent(window.location.search.replace(/^.*?\=/, ''));
    var datos = {};
    var datos =  JSON.parse(localStorage.getItem(stringQuery));
    if (datos == null) {
      loadJSON(function(response){
      localStorage.setItem(stringQuery, JSON.stringify(response[0]));
      var datos = {};   //This is where I have to repeate same code as above
      var datos =  JSON.parse(localStorage.getItem(stringQuery));
      displayEmailandRelatives(datos);
      });  
    }else{
      datos = JSON.parse(localStorage.getItem(stringQuery)); 
    }
  };

без ошибок, просто пытаюсь найти лучшее решение.

Ответы [ 2 ]

0 голосов
/ 04 июля 2019

просто удалите дублированный код, и он должен работать

function gettingReportbyEmail(){
    var stringQuery = decodeURIComponent(window.location.search.replace(/^.*?\=/, ''));
    // remove the code 
    if (datos == null) {
      loadJSON(function(response){
      localStorage.setItem(stringQuery, JSON.stringify(response[0]));
      displayEmailandRelatives(datos);
      });  
    }else{
      datos = JSON.parse(localStorage.getItem(stringQuery)); 
    }
  };

, он должен работать из-за JavaScript Closures https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures

0 голосов
/ 04 июля 2019
 if (datos == null) {
      loadJSON(function(response){
      localStorage.setItem(stringQuery, JSON.stringify(response[0]));
      datos = response[0];
      displayEmailandRelatives(datos);
      });  
    }

Я не вижу никакой цели установить значение localStorage и прочитать то же значение только для вызова функции.

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