fac25 / amai-mtoto

amai-mtoto.vercel.app
1 stars 1 forks source link

`async` and `await` #116

Open jackherizsmith opened 1 year ago

jackherizsmith commented 1 year ago

You can replace .then with await and put a resolved promise in a variable instead. there's a catch with useEffect which is they don't like async functions so you can wrap it. here's what that looks like (without comments), from home-page.js:

  useEffect(() => {
    if (user) {
      (async () => {
        const userFromDb = await getUserById(user.uid);
        let username = userFromDb.username;
        setName(username);
        let dueDate = userFromDb.dueDate;
        let weekToQuery = whichWeekToQueryFromBabySize(dueDate);
        setWeekNum(weekToQuery);
        const babySizeData = await getBabySizeByWeek(`Week ${weekToQuery}`);
        setBabySizeObj(babySizeData);
        let trimesterThisUserIsIn = whichTrimesterAreYouIn(dueDate);
        router.push(`/home-page?trimester=${trimesterThisUserIsIn}`);
      })();
    }
  }, [user]);

Also whilst we're here, I would recommend using a more specific dependency for this effect, i.e. user.uid. Since you want to limit how often it runs as a main page. That being said, there aren't currently many changes to user so it's not a huge deal.