0
votes

Comment accéder à la variable en dehors de la portée de la fonction?

J'ai la valeur initiale de la matrice est comme vide, en fonction de la fonction d'extraction, je mette la mise à jour du tableau FilterData avec des données mais en dehors de FETCHDATA Scope, il ne met pas à jour FilterData Il est toujours vide

 // Fetching Data and updating states
    let filterData = []
    const fetchData = async () => {
    const req = await fetch(
         "https://stratic-research-institute.firebaseio.com/articles.json"
          );
    let loaded = [];
    const res = await req.json();
    const vl = Object.keys(res);
    vl.map((item) => loaded.push(res[item]));

    setposts({
    arData: loaded.reverse(),
    loading: false,
   });
   filterData = loaded;
};
 console.log(filterData)


3 commentaires

Étant donné que fetchdata est async, console.log (filterdata) exécute avant votre fetchdata finitions, il affiche donc une matrice vide.


Est-ce que cela répond à votre question? Comment puis-je retourner la réponse d'un appel asynchrone? < / a>


réactjs.org/docs/faq-ajax.html


3 Réponses :


0
votes

Le filtreData est dans la portée.

La console.log est en cours d'exécution avant la récupération () car la récupération () est une méthode asynchrone.


0 commentaires

1
votes

Vous n'appelez pas la fonction dans le code Call fetchdata ​​code> et utiliser la promesse d'imprimer la valeur des données de filtre

p>

let filterData = []
    const fetchData = async () => {
      const req = await fetch(
        "https://stratic-research-institute.firebaseio.com/articles.json"
      );
      let loaded = [];
      const res = await req.json();
      const vl = Object.keys(res);
      vl.map((item) => loaded.push(res[item]));

     
      filterData = loaded;
    };
    fetchData().then(()=>{
      console.log(filterData)
    })


0 commentaires

0
votes

Vous pouvez essayer quelque chose comme ceci car vous accédez à des données asynchrones ... Vous ne pouvez également pas utiliser attendre code> en dehors d'une fonction async.

p>

// Fetching Data and updating states
    const fetchData = async () => {
      const req = await fetch(
           "https://stratic-research-institute.firebaseio.com/articles.json"
            );
      let loaded = [];
      const res = await req.json();
      const vl = Object.keys(res);
      vl.map((item) => loaded.push(res[item]));
      // don't have the whole context so let's comment this
     /* setposts({
      arData: loaded.reverse(),
      loading: false,
     }); */
     return loaded
  };
// one option
const run =  async() => {
  const filteredData = await fetchData();
  console.log(filteredData);
}
run();
// other option
fetchData().then((r)=>console.log(r))


0 commentaires