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

701
Views
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 answers
Answer question

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