cme-osuka / webbmobilapplikation

10 stars 16 forks source link

Återuppta timer på page refresh #8

Closed M00NB3VM closed 1 year ago

M00NB3VM commented 2 years ago

Jag har en useEffect som kollar ifall jag har något i local storage. Om jag har det vill jag återuppta min timer. Detta fungerar ifall jag bläddrar bland mina sidor i appen eller går ur appen, återkommer till t.ex landningssidan och sedan går till min timer. Däremot fungerar det inte om timersidan uppdateras eller om jag går ur appen och sedan direkt in på timersidan.

Problemet verkar vara att min array med timers (och ibland men sällan också min array med tasks) inte hunnit hämtats än.

Jag har försökt med en egen liten loader via en setState, flyttat runt mina funktioner och dylikt men får det inte att fungera.

Finns det ett sätt att vänta på att min array har fått sin data innan useEffecten, eller annan funktion körs? (om jag har något i local storage betyder det att min array med timers inte är tom, men som sagt har den inte hunnit att få sin data ännnu). printsc

sawariz0r commented 2 years ago

Använde du Promise.all() när du skapade ett loading-state? För vi kan ju se till att flera promises blir klara innan vi fortsätter med hjälp av Promise.all :)

Till exempel:

const { getTimers, setTimersLoading } = useContext1()
const { getTasks, setTasksLoading } = useContext2()

Promise.all([
  getTimers(),
  getTasks()
]).then(() => {
  setTimersLoading(false)
  setTasksLoading(false)
})

Det skulle man kunna köra i till exempel en useEffect någonstans som inte renderas om, till exempel i App.js eller liknande tänker jag. Man skulle kunna ta steget längre och visa en loading spinner ifall dessa inte laddas, innan man renderar ut applikationen (dock inte en supersnygg lösning) :)

För det jag tycker det låter som, är att du behöver eliminera risken att någon av de två inte hämtats innan du börjar jobba med dom

M00NB3VM commented 2 years ago

Jag gjorde en promise all i filen där mina första hämtningar sker, det fungerade.