Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

285
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!