Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

283
Vistas
React Native Expo + Firestore: ¿cómo evitar la recuperación del caché si no hay conexión a Internet?

De forma predeterminada (al menos si está utilizando Expo), parece que si intenta .get() algo de Firestore sin conexión a Internet, los datos se devolverán desde el caché, incluso si la persistencia local no está implementada en el navegador.

Puede ver este comportamiento en Expo, con el sdk original de firebase, si ejecuta este método sin conexión:

 async function performSomeQuery(query, limit) { const querySnapshot = await query.limit(limit).get(); if (querySnapshot.metadata.fromCache) { throw new Error("It is from cache!"); } if (querySnapshot.empty) { return []; } const result = querySnapshot.docs.map(parseDoc); return result; }

Para mí, este comportamiento es un poco confuso... porque si intenta habilitar la persistencia local de Firestore en su aplicación Expo, obtendrá el código de error: unimplemented

 firebase.firestore().enablePersistence() .catch((err) => { console.log(err.code); // unimplemented for Expo });

¿Cómo puedo recibir excepciones en lugar de datos "en caché" cuando Internet no está conectado?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Primero, deberá instalar NetInfo desde @react-native-community/netinfo

Luego, copie esta función de orden superior (una utilidad):

 import NetInfo from "@react-native-community/netinfo"; export default function withInternet(callback) { async function wrapped(...args) { const { isConnected, isInternetReachable } = await NetInfo.fetch(); if (isConnected === false || isInternetReachable === false) { throw new Error("No internet connection"); } return callback(...args); } const name = callback.displayName ?? callback.name ?? "unknown"; wrapped.displayName = `withInternet(${name})`; return wrapped; };

Como puede ver, estamos saliendo de la función envuelta sin ejecutar la devolución de llamada si no hay conexión a Internet o no se puede acceder a ella. (Nota: es importante verificar si === false , porque la API de NetInfo podría devolver un valor nulo/indefinido si se desconoce el estado de la red).

Ahora, en su código, en lugar de usar su método api original, simplemente haga lo siguiente:

 const performSomeQueryWithInternet = withInternet(performSomeQuery); (async () => { try { await performSomeQueryWithInternet(stuff); } catch(err) { console.error(err); } })();

Nota: recomiendo combinar esta solución con un proveedor de contexto global donde escuche el estado de la red y muestre los posibles errores en un componente de brindis.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda