Bonjour,

Voilà je rencontre un petit problème avec mon code.
J'essaye de return ma reponse de la function getJSON(), pour après getInfo() la return à sont tours, mais j'ai déjà essayer tout se que je savais sur javascipt, mais j'ai pas réussi.. J'ai essayer de définir getJSON en variable, pour que la return de getInfo() soit plus simple, mais sa marche toujour pas.
Désolé si sa vous pique les yeux, en voyant le code parce que il est pas opti j'imagine, mais seriez vous m'aider à trouver mon erreur ?
Sa fait déjà quelque heure, que j'essaye...

J'essaye à avoir:

  • Function: GetInfo(Follower, Amount);
  • Réponse: 71 // reponse du json.

Et je précise, que les variable du JSON sont bien là et fonctionnel.

function GetInfo(Info, Prefix) { // GetInfo(Follower, Amount);
  switch (Info) {
    case Follower:
      getJSON(url_followers, function(F) {
        if (Prefix === Amount) {
          // return F["_total"];
        } else if (Prefix === Name) {
          // return F['follows'][0].user.display_name;
        } else if (Prefix === Logo) {
          // return F['follows'][0].user.logo;
        } else {
          // Pour plus tard..
        }
        // normalement je return ici, mais j'arrive pas non plus. Même si je defini les var dans les if etc...
      });
      break;
    case Game:
      getJSON(url_channels, function(C) {
        if (Prefix === Name) {
          // return C.game
        } else {
          // return C.game
        }
      });
      break;
    case Donateur:
      getJSON(url_Donators, function(D) {
        if (Prefix === Name) {
          // return D.donations[1].donator.name
        } else if (Prefix === Amount) {
          // return D.donations[1].amount_label
        } else if (Prefix === Message) {
          // return D.donations[1].message
        } else {
          // Pour plus tard
        }
      });
      break;
    default:
      console.log("Error !");
  }
  // Et normalement je return ici au final..
};

Bien à vous !
Et merci !

3 réponses


Maenhyr
Réponse acceptée

Ta fonction getJSON est asynchrone, c'est normale qu'elle ne renvoie rien. Il te faut rendre ta fonction GetInfo asynchrone aussi. Tu as trois solutions pour ca :
1) tu passes une callback en parametre de GetInfo, tu appeleras cette callback lorsque getJSON retournera quelque chose.

function GetInfo(Info, Prefix, callback) {
    getJSON(url_followers, function(F) {
      callback(F);
    }
}

GetInfo('', '', function(F) {
  console.log(F) // retournera une valeur
});

2) tu utilises une Promise.

function GetInfo(Info, Prefix) {
    return new Promise(function(resolve, reject) {
        getJSON(url_followers, function(F) {
          resolve(F);
        });
    });
}

GetInfo('', '')
  .then(function(F) {
  console.log(F) // retournera une valeur
  });

3) tu utilises async/await

async function getJSON(url, callback) {
  var xhr = new XMLHttpRequest();
  xhr.open("GET", url, true);
  xhr.onload = function() {
    if (xhr.readyState == 4 && xhr.status == "200") {
      callback(JSON.parse(xhr.responseText));
    }
  };
  xhr.send();
};

async function GetInfo(Info, Prefix, callback) {
    return await getJSON(url_followers);
}
function GetInfo(Info, Prefix) { // GetInfo(Follower, Amount);
  switch (Info) {
    case Follower:
      var zz = getJSON(url_followers, function(F) {
        if (Prefix === Amount) {
          // return F["_total"];
        } else if (Prefix === Name) {
          // return F['follows'][0].user.display_name;
        } else if (Prefix === Logo) {
          // return F['follows'][0].user.logo;
        } else {
          // Pour plus tard..
        }
        // normalement je return ici, mais j'arrive pas non plus. Même si je defini les var dans les if etc...
      });
      break;
    case Game:
      getJSON(url_channels, function(C) {
        if (Prefix === Name) {
          // return C.game
        } else {
          // return C.game
        }
      });
      break;
    case Donateur:
     var zz  getJSON(url_Donators, function(D) {
        if (Prefix === Name) {
          // return D.donations[1].donator.name
        } else if (Prefix === Amount) {
          // return D.donations[1].amount_label
        } else if (Prefix === Message) {
          // return D.donations[1].message
        } else {
          // Pour plus tard
        }
      });
      break;
    default:
      console.log("Error !");
  }
  // Et normalement je return ici au final..
  return zz;
};

ça fonctionne qui si la fonction getJSON retourne une valeur ;)
ce qui n'est pas le cas.

]plus

Pierre

Merci pour ta reponse ;) je vient d'essayer, j'ai return un reponse des getJSON(return "test") mais la variable ZZ est toujour indefini..
Peut-ètre que la function de base getjson, à une erreur..

Corriger:

      var zz = getJSON(url_followers, function(F) {
        if (Prefix === Amount) {
          // return F["_total"];
        } else if (Prefix === Name) {
          // return F['follows'][0].user.display_name;
        } else if (Prefix === Logo) {
          // return F['follows'][0].user.logo;
        } else {
          // Pour plus tard..
        }
        // normalement je return ici, mais j'arrive pas non plus. Même si je defini les var dans les if etc...
        return "test"; /// <---------------------------------------------------------
      });

Et voilà la function de base de getJSON :)

var getJSON = function(url, callback) {
  var xhr = new XMLHttpRequest();
  xhr.open("GET", url, true);
  xhr.onload = function() {
    if (xhr.readyState == 4 && xhr.status == "200") {
      callback(JSON.parse(xhr.responseText));
    }
  };
  xhr.send();
};

et Merci beaucoup pour votre aide ! ;D