如何在函数范围之外访问变量?

时间:2020-04-07 15:08:33

标签: reactjs react-native react-hooks

我的数组初始值就像是空的,在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)

3 个答案:

答案 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))