web-dev-qa-db-fra.com

Enregistrer la réponse Async/Await sur une variable

J'essaie de comprendre les appels asynchrones en utilisant async/wait et try/catch.

Dans l'exemple ci-dessous, comment puis-je enregistrer ma réponse réussie à une variable pouvant être utilisée dans le reste du code?

const axios = require('axios');
const users = 'http://localhost:3000/users';

const asyncExample = async () =>{
    try {
        const data = await axios(users);
        console.log(data); //200
    }
    catch (err) {
        console.log(err);
    }
};

//Save response on a variable
const globalData = asyncExample(); 
console.log(globalData) //Promise { <pending> }
3
Jonca33

1) Renvoyer quelque chose de votre fonction asyncExample

const asyncExample = async () => {
  return await axios(users)
};

2) Appelez cette fonction et gérez sa Promise renvoyée:

asyncExample().then(users => {
  console.log(users)
})
.catch(err => console.error(err))

Pourquoi devriez-vous le gérer comme ça?

  • Vous ne pouvez pas faire await de niveau supérieur (il y a une proposition cependant) await doit exister dans une fonction async.

  • Si vous marquez une fonction avec async, elle retournera une Promise. Vous pouvez très bien gérer cette Promise au plus haut niveau, comme je le fais ci-dessus.

4
Nik Kyriakides

try..catch crée une nouvelle portée de bloc. Utilisez let pour définir data avant try..catch au lieu de const, returndata à partir de asyncExample appel de fonction

(async() => {

  const users = 123;

  const asyncExample = async() => {
    let data;
    try {
      data = await Promise.resolve(users);
    } catch (err) {
      console.log(err);
    }
    return data;
  };

  //Save response on a variable
  const globalData = await asyncExample();
  console.log(globalData);
  // return globalData;
})();

0
guest271314