分享
三行代码  ›  专栏  ›  技术社区  ›  PaulAsmon

我必须等待useffect中已经是异步的异步函数吗? - Do I have to await an async function in useEffect that is already async?

  •  0
  • PaulAsmon  · 技术社区  · 1 周前

    假设我有下面的代码,我调用我的函数 usersaApi.getUsersId 它在 useEffect 函数,我必须使响应(因为它返回值,而不是承诺)成为异步函数吗?

    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)是否必须对已经是async/await的函数使用async/await 2)对已经返回数据而不是承诺的函数使用await&return的区别。

    1 回复  |  直到 1 周前
        1
  •  1
  •   Nicholas Tower    1 周前

    1)是否必须对已经是async/await的函数使用async/await

    你想用什么语法就看你了。您可以使用async/await,也可以使用较旧的 .then 风格。就我个人而言,我发现异步等待样式更容易理解,所以我个人更喜欢它。不过,我还是建议 反对 把这两种语法混合在一起。几乎没有必要这样做,它只会使代码更难理解。要么写:

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

    或:

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

    2)对已经返回数据而不是承诺的函数使用await&return的区别。

    async/await的存在简化了使用promises的语法。如果不使用promises,就不需要async/await。