【问题标题】:how to force to function execute only when after another async function complete仅在另一个异步功能完成后如何强制执行功能
【发布时间】:2020-11-18 19:04:08
【问题描述】:

我想知道会议的长度是否大于 1,以便向用户展示他是否可以预约另一个会议(一周内最多允许一次会议),所以我需要在 useEffect 内。

     state.userMeetings.length > 1 ? console.log("bigger") : console.log("less then 1");

    useEffect(() => {
        getUserMeetings(user.token, user.userId);////async function
        check();
    }, []);

现在后面的所有东西都无关紧要了: 我打电话给 getUserMeeting 并获得一系列会议: 问题:当我第一次渲染/进入组件时,我在检查函数中得到 "less then 1"(请注意,在 userMeetings 数组中有超过一个 meet),

在第一次渲染后,如果我返回并按预期工作并返回我“更大”

问题:如果我执行 getUserMeeting,为什么在第一个我得到的少于一个? 也许是不是等着完成“getUserMeeting”? 如何强制他先完成异步函数,然后执行 check() 函数?

【问题讨论】:

    标签: reactjs react-native async-await


    【解决方案1】:

    这样试试

    useEffect(() => {
        async function fetchMyAPI() {
          let response = await getUserMeetings(user.token, user.userId); //async function
          check();
        }
    
        fetchMyAPI()
      }, [])
    

    【讨论】:

    • 我收到错误:警告:效果函数不得返回除用于清理的函数之外的任何内容。看起来你写了 useEffect(async () => ...) 或者返回了一个 Promise。相反,在你的效果中编写异步函数并立即调用它: useEffect(() => { async function fetchData() { // 你可以在这里等待 const response = await MyAPI.getData(someId); // ... } fetchData(); }, [someId]); // 如果效果不需要道具或状态,则为 []
    猜你喜欢
    • 2019-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-28
    • 1970-01-01
    • 2018-05-31
    • 2012-07-01
    相关资源
    最近更新 更多