web-dev-qa-db-fra.com

Récupérer l'API utilisant une valeur de retour Async/Await inattendue

Voici la fonction:

const getUserIP = async () => {
  let response = await fetch('https://jsonip.com/');
  let json = await response.json();

  console.log(json.ip)
  return json.ip;
};

Dans la console, l'adresse IP est enregistrée comme prévu. Cependant, lorsque je sauvegarde l'adresse IP en une variable:

const ip = getUserIP();

Puis tapez ip dans la console, la valeur est la suivante:

Promise { <state>: "fulfilled", <value>: "/* my IP here*/" }

J'ai visionné des vidéos sur YouTube qui utilisaient la même logique/syntaxe, bien que pour une API différente, mais cela fonctionne. J'ai effectué une recherche sur Google et SO et je n'ai pas trouvé de fil ayant le même problème.

Qu'est-ce que je rate? 

Merci.

3
Ibrahim

Fonctions asynchronesreturn Promises, vous devez obtenir cette valeur comme suit:

getUserIP().then(ip => console.log(ip)).catch(err => console.log(err));

Ou, vous pouvez ajouter la déclaration async à la fonction principale qui appelle la fonction getUserIP:

async function main() {
    const ip = await getUserIP();
}
3
Ele

Les fonctions async renvoient une Promise et sa valeur résolue correspond à tout ce que vous retournez. Pour obtenir ip, vous devez utiliser then.

getUserIP().then(ip => {})
1
Joseph

Vous devez ajouter .then à getUserIP() car la fonction async renvoie une promesse.

getUserIp().then(ip => console.log(ip));

Vous pouvez également 

(async() => {
    const ip = await getUserIP();
    console.log(ip);
})();
0