我的数组初始值就像是空的,在fetch函数中,我正在用数据更新filterData数组,但是在fetchData范围之外,它没有更新filterData仍然为空
// 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)
答案 0 :(得分:1)
您没有在代码中调用该函数
调用fetchdata
并使用promise来打印过滤器数据的值
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)
})
答案 1 :(得分:0)
filterData在范围内。
console.log在fetch()之前执行,因为fetch()是异步方法。
答案 2 :(得分:0)
您可以尝试这样的操作,因为您正在访问异步数据...而且您也不能在异步函数外部使用await
。
// 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))