Javascript 无法分解属性';数据';属于';(中间值)和#x27;因为它是未定义的

Javascript 无法分解属性';数据';属于';(中间值)和#x27;因为它是未定义的,javascript,reactjs,Javascript,Reactjs,这个错误是在控制台,它阻止了应用程序的工作,我找不到任何错误,如果有人可以帮助?这是一个MERN应用程序 有问题的代码 export const getPosts = () => async (dispatch) => { try { const { data } = await api.fetchPosts(); dispatch({ type: 'FETCH_ALL', payload: data }); } catch (error

这个错误是在控制台,它阻止了应用程序的工作,我找不到任何错误,如果有人可以帮助?这是一个MERN应用程序

有问题的代码

export const getPosts = () => async (dispatch) => {
    try {
      const { data } = await api.fetchPosts();
  
      dispatch({ type: 'FETCH_ALL', payload: data });
    } catch (error) {
      console.log(error.message);
    }
  };
VSC告诉我Wait不会影响这种表达式,因为fetchPosts是一个请求,所以它应该这样做?代码如下所示

export const fetchPosts = () => {
    axios.get(url)
}

问题在于,尽管可能会返回一个承诺,但您包装它的
fetchPosts
函数不会返回
axios.get
返回的承诺:

const fetchPosts=()=>{
get(url);
};
const myFetch=fetchPosts();
console.log(myFetch);//将记录“未定义”`
如果您将fetchPosts重写为:

export const fetchPosts=()=>axios.get(url);
…有了这个,我觉得应该行得通。或者,您也可以显式返回axios.get的结果:

const fetchPosts=()=>{
返回axios.get(url);
};

…但你的皮棉可能会抱怨。

太棒了,谢谢你,这已经让我疯狂了两个小时了!不是说我会,而是设置const info=axios.get(url)然后返回信息会有同样的效果吗?如果一句话只是想更多地理解它背后的JS,那就更好了?@DanWilstrop是的,那也行。你基本上需要回报一个承诺。不管你在函数中还做了什么。谢谢你的帮助抱歉我错过了早些时候的回复——谢谢@GabrielePetrioli的来电。很高兴这有帮助,祝你好运,编码愉快!这回答了你的问题吗?谢谢你的帮助