Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

242
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda