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

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

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 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