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

709
Visualizações
Async-Await: ¿Cómo obtener datos en múltiples llamadas en espera incluso cuando hay un error en una?

Así que tengo esta función async en la que hago varias llamadas a la DNS Api de NodeJS. Las dos primeras llamadas devuelven datos, pero debido a la tercera, el bloque catch se activa y no obtengo los datos de las dos primeras.

Como todo depende del tipo de consulta ( netflix.com ), algunas de las operaciones de espera pueden arrojar un error debido a que no hay datos. Pero lo que quiero es obtener datos de las otras llamadas, incluso si hay errores en algunas de ellas.

Aquí está el código:

 const dnsResolve = async () => { const query = 'netflix.com'; try{ const aRecord = await dns.resolve4(query); const aaaaRecord = await dns.resolve6(query); const cnameRecord = await dns.resolveCname(query); console.log(aRecord); console.log(aaaaRecord); console.log(cnameRecord); }catch(err) { console.log(err); } } dnsResolve();

El código anterior devuelve

 Error: queryCname ENODATA netflix.com at QueryReqWrap.onresolve [as oncomplete] (internal/dns/promises.js:167:17) { errno: undefined, code: 'ENODATA', syscall: 'queryCname', hostname: 'netflix.com' }

Salidas individuales de las dos primeras consultas:

 aRecord: [ { address: '51.73.1.12' }, { address: '55.83.62.128' }, { address: '12.12.82.118' } ] aaaaRecord: [ { address: '2406:da200:ff00::222c0:598a' }, { address: '24206:da00:ff00::22c2:44203' }, { address: '2406:da0e0:ff00::36de2:41fd' } ]

Cómo quiero mostrar los datos:

 [ { address: '51.73.1.12' }, { address: '55.83.62.128' }, { address: '12.12.82.118' }, { address: '2406:da200:ff00::222c0:598a' }, { address: '24206:da00:ff00::22c2:44203' }, { address: '2406:da0e0:ff00::36de2:41fd' }, { NO CNAME RECORDS } ]

Tenga en cuenta que habrá alrededor de 6 llamadas a la DNS API . No se puede determinar cuál activará un error debido a que no hay datos. Depende totalmente de la consulta.

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Este es el caso de uso de Promise.allSettled para:

 const results = await Promise.allSettled([ dns.resolve4(query), dns.resolve6(query), dns.resolveCname(query), ]); for (const {status, value, reason} of results) { if (status === "fulfilled") { // Promise was fulfilled, use `value`... } else { // Promise was rejected, see `reason` for why... } }

O si solo quieres los resultados exitosos:

 const results = await Promise.allSettled([ dns.resolve4(query), dns.resolve6(query), dns.resolveCname(query), ]); const values = results.filter(({status}) => status === "fulfilled") .map(({value}) => value); // ...use `values`...
over 4 years ago · Santiago Trujillo 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