tengo el siguiente problema:
export async function updateLessons() { let data await database().goOnline().then(async () => { await database() .ref('days') .on('value', snapshot => { console.log(snapshot.val()) data = snapshot.val(); }); }); return data; }Uso esta función para actualizar mi aplicación cuando deslizo hacia abajo
const onRefresh = React.useCallback(async () => { setRefreshing(true); setLessons(await updateLessons()); console.log(lessons) setRefreshing(false); }, []); Se llama desde la vista de desplazamiento (refreshcontrol)
El problema es que no funciona de forma asíncrona. En el registro de la consola veo mi instantánea. Pero la aplicación se actualizó más rápido y en console.log (lecciones) no está definida. ¿Cómo puedo arreglarlo?
La actualización del estado es una operación asincrónica y aún no se habrá completado cuando se ejecute la instrucción console.log .
Una forma sencilla de obtener el resultado correcto es capturar las nuevas lecciones en la variable local (que se actualiza de forma síncrona):
const onRefresh = React.useCallback(async () => { setRefreshing(true); const newLessons = await updateLessons(); setLessons(newLessons); console.log(newLessons) setRefreshing(false); }, []);Ver también:
useEffect para responder a los cambios de estado.