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

236
Views
NodeJS, del encadenamiento de promesas al encadenamiento asíncrono/en espera

Con NodeJS version 16.14.0 , estoy tratando de migrar de una promise .then().catch a una administración async/await .
El problema es que con el primer método, pude encadenar múltiples funciones secuencialmente, con el mismo gran objeto pasado a través de cada una (con return resolve(bigObject) y cada función tomando como entrada el mismo bigObject ). Estaba haciendo esto porque puedo administrar microerrores dentro de los datos (por lo que no hay capturas involucradas), devolviendo al usuario una lista completa de errores:

 var commonData = { data1: ... data2: ... data3: ... data4: ... data5: ... data6: ... }; return function1(commonData) .then(function2) .then(function3) .then(function4) .then(function5) .then(function(result) { //Inside this .then, I'd have the "result" variable as result of the chain }) .catch(error => { return reject(error); });

¿Cómo puedo hacerlo con el sistema de espera asíncrono? Esto es lo que he probado hasta ahora:

 var commonData = { data1: ... data2: ... data3: ... data4: ... data5: ... data6: ... }; commonData = await function1(commonData); commonData = await function2(commonData); commonData = await function3(commonData); commonData = await function4(commonData); commonData = await function5(commonData); //I was expecting to have inside "commonData" the same situation //as "result" in the chain above

¿Hay otra forma de encadenar funciones con el mismo objeto grande que me falta?

EDITAR:
2 de las funciones que estoy usando en esta parte... están diseñadas de esta manera porque también están siendo llamadas en otras partes del archivo, no pude usarlas localmente

 //function 1 async function function1(commonData) { try { var data1 = await models.data1.findAll({where: {Domain_ID: [13,15]}}) data1.forEach(function(dat) { commonData.data1.push(dat.dataValues); }); return commonData; } catch (error) { throw error; } } //function2 async function function2(commonData) { try { var data2 = await models.data2.findAll(); data2.forEach(function(dat) { commonData.data2.push(dat.dataValues); }); return commonData; } catch (error) { throw error; } }
about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

No, no hay otra manera. Una de las razones por las que se implementó Async/Await es que el encadenamiento de Promise puede verse bastante feo y desordenado. Si prefiere .then() , simplemente manténgalo en este módulo.

Para leer más: https://blog.logrocket.com/promise-chaining-is-dead-long-live-async-await-445897870abc/

about 4 years ago · Juan Pablo Isaza Report

0

La forma en que lo tiene ( commonData = await function1(commonData) , etc.) está bien. Pero si no quiere hacer eso, puede anidar las llamadas:

 const result = await function5( await function4( await function3( await function2( await function1(commonData) ) ) ) );

O usa un bucle:

 let result = commonData; for (const fn of [function1, function2, function3, function4, function5]) { result = await fn(result); }

O podría seguir usando then . Aunque, en general, mezclar async / await con controladores de promesa explícitos a través .then / .catch es confuso, hay algunos momentos limitados en los que puede hacerlo:

 const result = await function1(commonData) .then(function2) .then(function3) .then(function4) .then(function5);

Funciona porque las funciones async son solo una forma de consumir y producir promesas.


O con la gran advertencia de que sabe que las funciones solo modifican el estado del objeto y no devuelven (cumplen su promesa con) un objeto diferente , podría hacer:

 await function1(commonData); await function2(commonData); await function3(commonData); await function4(commonData); const result = await function5(commonData);

pero es una gran advertencia.

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!