如何在javascript中读取对象的属性?

如何在javascript中读取对象的属性?,javascript,reactjs,react-hooks,javascript-objects,react-context,Javascript,Reactjs,React Hooks,Javascript Objects,React Context,你好 我正在使用React和React上下文API。我有整个应用的App.js组件。它是一个功能组件。在它的上下文中有状态(useState): const [contextValue, setContextValue] = useState(null) 和useffect: useEffect(() => { const wrapper = async () => { let data = {}; const fetchData = () =&g

你好

我正在使用React和React上下文API。我有整个应用的
App.js
组件。它是一个功能组件。在它的上下文中有状态(
useState
):

const [contextValue, setContextValue] = useState(null)
useffect

useEffect(() => {
    const wrapper = async () => {
      let data = {};

      const fetchData = () => {
        fetchAbout().then((res) => (data.about = res.data));
        fetchNews().then((res) => (data.news = res.data));
        fetchArticles().then((res) => (data.articles = res.data));
        fetchOffer().then((res) => (data.offer = res.data));
        fetchPortfolio().then((res) => (data.portfolio = res.data));
        fetchQuestions().then((res) => (data.questions = res.data));
      };
      await fetchData();

      console.log(data);
      console.log(data.about);

      setContextValue(data);
    };

    wrapper();
  }, []);

因此,在
fetchData
函数中,我正在创建
data
对象的属性。 因此,在等待fetchData()之后,有两个控制台日志。正如所料,首先是记录数据对象及其字段:


但是,
console.log(data.about)有问题,因为它正在记录
未定义
!。
我希望它是数据对象中about字段的值(就像在first
console.log中一样)


提前感谢

fetchData没有返回承诺,因此您不能“等待”。 当您
console.log(data.about)
时,数据尚未填充。 你可以通过

  const fetchData = () => {
    return Promise.all([
       fetchAbout().then((res) => (data.about = res.data)),
       fetchNews().then((res) => (data.news = res.data)),
       fetchArticles().then((res) => (data.articles = res.data)),
       fetchOffer().then((res) => (data.offer = res.data)),
       fetchPortfolio().then((res) => (data.portfolio = res.data)),
       fetchQuestions().then((res) => (data.questions = res.data)),
    ])
  };

尝试更改fetchAbout()。然后((res)=>(data.about=res.data.about));您的
fetchData
返回
undefined
。你不是在等待里面的任何承诺来解决。使用
Promise.all
先等待每个承诺得到解决,然后调用
setContextValue
Promise.all([fetchAbout(),fetchNews()])。然后((res)=>setContextValue({about:res[0]。数据,新闻:res[1]。数据…
非常感谢,它解决了我的问题。你能解释一下,
Promise.all()
是如何工作的吗?Promise.all获得一个承诺数组,并返回一个承诺,在所有承诺都得到解决后解析(如果一个或多个失败,它将拒绝)