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

124
Views
Usar async cuando se deben realizar dos solicitudes y se necesita la respuesta de la primera en la otra solicitud

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:

  • Entonces, ¿cómo es posible que no ocurra ningún error?
  • ¿Cómo es que, a veces, no se agrega ningún documento a Firestore? Como si se saltara de alguna manera...
  • ¿Qué modificación se puede hacer para que await addDoc(collection(db, "name_of_collec") se ejecute obligatoriamente?

Información de contexto:

  • Estoy usando Express.js y Node.js para hacer un backend
  • Estoy usando Axios para hacer la primera solicitud y la segunda es agregar un documento a Firestore.
  • Firestore es una base de datos NoSQL dentro de Firebase de Google.
about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

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); } };
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!