11486 sujets

JavaScript, DOM et API Web HTML5

bonjour,
J'ai fait deux fonction une qui envoie ma requête et return le résultat et une autre fonction qui récupère se résultat, néanmoins quand j'essaye de log le résultat sa me renvie undefined, je pense que c'est parce que a chaque .then() sa créé une nouvelle fonction mais je ne sais pas comment y accéder.
Merci de votre aide
cordialement

JavaScript :

const url = "https://geo.ipify.org/api/v2/country?apiKey=XXXXXj&ipAddress=";

function GetIpAndLink() {
    var Ip = InputIP.value;
    fetch(url + Ip)
        .then((response) => response.json())
        .then((data) => {return data})
};

function FinalFunction() {
    var DataReturn = GetIpAndLink(); // Cencer me retourner la valeur de data 
    console.log(DataReturn); // Undefined
};


edit gcyrillus : clé API retirée
Modifié par gcyrillus (09 Nov 2022 - 10:44)
Bonjour Fox68,

Toute d'abord je te conseille vivement d'éditer ton premier message pour supprimer la clé d'API ipify ainsi que d'en re-générer une nouvelle auprès du service, que tu ne divulguera pas.

Effectivement, dans l'état, ta fonction GetIpAndLink ne renvoie rien. Le return data ne fait que retourner de la fonction anonyme que tu passes en argument de then.

Une manière de réécrire ton code pour qu'il fasse ce que tu attendes serait d'utiliser async/await :

async function GetIpAndLink() {
    let Ip = InputIP.value;
    let res = await fetch(url + Ip)
    let json = await res.json()
    return json
};

function FinalFunction() {
    GetIpAndLink()
        .then((res) => console.log(res))
};


Voici quelques ressources que tu peux consulter our en savoir plus :
Les Promesses Javascript
Javascript asynchrone
Les functions asynchrones
Le mot-clé await
Un grand merci à vous Guillaume. Je ne sais pas si vos conseils serviront à Fox68, mais ce qui est sûr c'est qu'ils me serviront à moi.
Bonjour,
Pour la clef de l'API je l'ai trouver sur internet donc je pensais que c'étais une clef publique mais j'y penserais par la suite.
En se qui concerne la résolution de mon problème je n'ai pas encore u l'occasion d'essayer, je ne connaissais pas du tout cette façon de faire donc c'est une bonne découvert.
merci beaucoup GuillaumeBauer.