Tengo una función asíncrona como esta:
exports.myFunction = async (req, res, next) => { if (some condition) { next() } try { const results = await axios.get(`https://a-domain.com/url/path`); const info = results.data; const docRef = await addDoc(collection(db, "name_of_collec"), info); console.log("Document written with ID: ", docRef.id); } catch (e) { console.error("Error adding document: ", e); } next(); }; Aquí, la respuesta de la primera solicitud se requiere en la segunda solicitud. Pero según mi conocimiento, dado que estoy realizando solicitudes asincrónicas, las dos solicitudes deben realizarse al mismo tiempo.
Lo que no puedo entender:
await addDoc(collection(db, "name_of_collec") se ejecute obligatoriamente?Información de contexto:
Pero según mi conocimiento, dado que estoy realizando solicitudes asincrónicas, las dos solicitudes deben realizarse al mismo tiempo.
asynchronous no significa que las solicitudes se realicen al mismo tiempo. Significa que el código no esperará las respuestas de estas solicitudes. Las solicitudes se realizan de la manera en que las agrega en el código y las respuestas serán asincrónicas, es decir, la respuesta se recibirá en algún momento en el futuro.
Y no hay garantía de qué manera serán recibidos.
Sin embargo, cuando demanda a async/await , la ejecución del código espera a la palabra clave await para obtener la respuesta en función de su éxito o falla, llama al siguiente flujo. No es más que azúcar sintáctico sobre promesas. Bajo el capó, así es como se ejecutará su código:
exports.myFunction = async (req, res, next) => { if (some condition) { next()l } axios.get(`https://a-domain.com/url/path`).then(result => result).then(data => { const info = data; addDoc(collection(db, "name_of_collec"), info).then(response => { console.log("Document written with ID: ", docRef.id); }).catch(e => { console.error(e); }) }).catch(e => { console.error(e); }) next(); };Entonces, ¿cómo es posible que no ocurra ningún error?
No es necesario que el error se produzca cuando lo solicites. Si ese es el caso, se debe activar el manejador de capturas.
¿Cómo es que, a veces, no se agrega ningún documento a Firestore? Como si se saltara de alguna manera...
El motivo podría ser que la info es un objeto vacío y firestore elimina automáticamente el documento vacío.
No hay problema, pero no hay info de datos que esté vacía a veces que omita la adición (solicita firestore, pero firestore elimina los documentos vacíos)
exports.myFunction = async (req, res, next) => { if (some condition) { next() } try { const results = await axios.get(`https://a-domain.com/url/path`); const info = results.data; const is_Info_Data = Array.isArray(info) ? info?.length >= 1: Object.keys(info) !== 0 if (is_Info_Data) { const docRef = await addDoc(collection(db, "name_of_collec"), info); console.log("Document written with ID: ", docRef.id); } else { console.log(`Info is empty ${info} no addition to DB`); } next(); } catch (e) { console.error("Error adding document: ", e); next(e); } };