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

434
Vistas
Firestore 'await addDoc' (versión web 9) se bloquea para siempre cuando se pierde la conexión de red

Estoy usando Firestore 'addDoc' (versión web 9,https://firebase.google.com/docs/firestore/manage-data/add-data ) para agregar un nuevo documento:

 const ref = collection(this.db, 'participants').withConverter(Participant.dataConverter); const docRef = await addDoc(ref, participant);

Esto funciona muy bien si la conexión de red está bien.

Sin embargo, si me desconecto de Internet al deshabilitar el adaptador de red (Windows), 'await addDoc' parece bloquearse para siempre (no regresa, las siguientes líneas de código no se ejecutan).

Varios errores de red se muestran continuamente en la consola durante algún tiempo:

 zone.js:1465 POST https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channe…A1%3A447623293743%3Aweb%3Aaadb8ec…%0D%0A&zx=bjcly4sf4lta&t=1 net::ERR_NAME_NOT_RESOLVED index.esm2017.js:78 [2022-01-03T13:30:28.657Z] @firebase/firestore: Firestore (9.6.1): Connection WebChannel transport errored: Vd {type: 'c', target: Y, g: Y, defaultPrevented: false, status: 1} www.google.com/image…f?zx=lih9uz2upg4y:1 GET https://www.google.com/images/cleardot.gif?zx=lih9uz2upg4y net::ERR_NAME_NOT_RESOLVED

Mientras tanto, se activa 'onSnapshot' y el nuevo documento (obviamente local) se incluye en la lista de documentos.

Si me vuelvo a conectar a internet (reactivando el adaptador de red) tarda unos segundos, luego el código sigue como si todo fuera normal.

¿Es esto intencionado? ¿Qué puedo hacer para detectar esto? Al menos, no es aceptable que el código deje de ejecutarse...

A pesar de este problema, intentaré detectar problemas de conexión y mostrar algún tipo de advertencia, pero, sin embargo, 'addDoc' debería devolver un error.

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

0

Este es el comportamiento esperado: la promesa de addDoc solo se resuelve una vez que se completa la operación de escritura en el servidor. Si no quiere esperar eso, no use await .

Si hay un problema con la escritura local, addDoc generará una excepción. Solo cuando hay un problema con la escritura en el servidor, rechazará la promesa.


En v8 y antes, podía obtener DocumentReference sin esperar usando collection.doc() . Consulte el último fragmento en la documentación sobre cómo agregar un documento para saber cómo hacer esto también en v9:

En algunos casos, puede ser útil crear una referencia de documento con una identificación generada automáticamente y luego usar la referencia más adelante. Para este caso de uso, puede llamar a doc() :

 import { collection, doc, setDoc } from "firebase/firestore"; // Add a new document with a generated id const newCityRef = doc(collection(db, "cities")); // later... await setDoc(newCityRef, data);

Detrás de escena, .add(...) y .doc().set(...) son completamente equivalentes, por lo que puede usar el que sea más conveniente.

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