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 Réponses :
Le filtreData est dans la portée. p> blockQuote>
La console.log est en cours d'exécution avant la récupération () car la récupération () est une méthode asynchrone. P>
Vous n'appelez pas la fonction dans le code
Call p> fetchdata code> et utiliser la promesse d'imprimer la valeur des données de filtre
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)
})
Vous pouvez essayer quelque chose comme ceci car vous accédez à des données asynchrones ... Vous ne pouvez également pas utiliser p> attendre code> en dehors d'une fonction async.
// 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))
Étant donné que
fetchdata code> est async,
console.log (filterdata) code> exécute avant votre
fetchdata code> 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