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

122
Vistas
¿Cómo empujar las promesas fallidas para separar la matriz?

Estoy recorriendo los identificadores que lo envían a una función asíncrona y quiero devolver datos exitosos y fallidos, en este momento solo estoy devolviendo datos exitosos

 const successContractSignature: LpContractSla[] = []; for (const id of lpContractSlaIds) { const data = await createLpSignature(context, id); if (data) { successContractSignature.push(data); } } return successContractSignature;

Si createLpSignature arroja un error, ¿necesito intentarlo aquí? pero eso no saldría del bucle? ¿Cómo puedo enviar datos fallidos a una matriz separada sin interrumpir el ciclo?

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

0

A menos que haya una razón específica para evitar la llamada en paralelo, siempre es una buena práctica evitar iniciar llamadas asíncronas en un bucle for con espera, ya que esperará a que se resuelva (o rechace) cada promesa antes de ejecutar la siguiente. . Este es un patrón mejor que le permite obtener también todos los resultados de las promesas, ya sea que se hayan resuelto o rechazado:

 const successContractSignature: LpContractSla[] = await Promise.allSettled(lpContractSlaIds.map((id: string) => createLpSignature(context,id))) return successContractSignature;

Pero si por alguna razón en particular necesita hacer estas llamadas en una secuencia y no en paralelo, puede envolver la llamada única en un bloque de captura de prueba, que no saldrá del bucle:

 for (const id of lpContractSlaIds) { let data; try { data = await createLpSignature(context, id); } catch(e) { data = e } if (data) { successContractSignature.push(data); } }

Puedes probarlo en este ejemplo:

 const service = (id) => new Promise((res, rej) => setTimeout( () => (id %2 === 0 ? res("ID: "+id) : rej('Error ID : '+id)), 1000 ) ); const ids = [1,2,3,4,5] const testParallelService = async () => { try { const data = await Promise.allSettled(ids.map(id => service(id))) return data.map(o => `${o.status}: ${o.reason ?? o.value}`) } catch(e) { console.log(e) } } testParallelService().then(data => console.log("Parallel data: ", data)) const testSequentialService = async () => { const res = []; for (const id of ids) { let data; try { data = await service(id); } catch (e) { data = e; } if (data) { res.push(data); } } return res; }; testSequentialService().then((data) => console.log('Sequential Data: ', data));

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