我是否必须等待已经异步的useEffect中的异步函数?

时间:2019-09-11 21:56:52

标签: javascript reactjs

让我们说下面的代码,然后在usersaApi.getUsersId函数中调用函数useEffect,我是否必须做出响应(因为它返回值,而不是Promise)一个异步功能?

const usersApi = {
  getUserIds: async storyId => {
    const result = await axios
      .get(`${users + userId}.json`)
      .then(({ data }) => data);

    return result;
  },
}

useEffect(() => {
    const fetchData = async () => {
      await usersApi.getUserIds().then(data => setUserIds(data));
    };

    fetchData();
}, []);

使用之间还有什么区别?

const fetchData = async () => {
    await usersApi.getUserIds().then(data => setUserIds(data));
};

vs。

const fetchData = async () => {
     const result = await usersApi.getUserIds().then(data => setUserIds(data));

     return result;
};

我想我可以等待响应而不返回结果,对不对?这里有两个问题:

1)我是否必须在已经异步/等待的函数上使用异步/等待 2)在已经返回数据而不是promise的函数上使用await和return之间的区别。

1 个答案:

答案 0 :(得分:1)

  

1)我是否必须在已经异步/等待的函数上使用异步/等待

由您决定要使用哪种语法。您可以使用async / await,也可以使用较旧的.then样式。我个人觉得异步等待样式更容易理解,所以我个人更喜欢它。但是,我建议反对混合使用两种语法。几乎从来没有必要这样做,而这最终会使代码更难以理解。要么写:

const fetchData = async () => {
  const data = await userApi.getUserIds();
  setUserIds(data);
}

或:

const fetchData = () => {
  userApi.getUserIds.then(data => setUserIds(data));
}
  

2)在已经返回数据而非承诺的函数上使用等待和返回之间的区别。

存在异步/等待以简化使用诺言的语法。如果您不使用诺言,则不需要异步/等待。

相关问题