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

69
Views
Cómo detener el procesamiento que continúa más allá de un rechazo de promesa

Tengo un código asíncrono que me gustaría dejar de ejecutar cuando lo reject .

Nota:

 let ingestPromises = event.Records.map(async (record, i) => { let camera = JSON.parse(record.body) return new Promise(async (resolve, reject) => { let imageBuffer; try { imageBuffer = await retrieveImageFromURI(camera.ing_uri) console.log(`Record #${i} Successful Ingestion from URI`); } catch (err) { console.log("Going to reject"); reject({ 'Task': `Attempting to pull image from camera (${camera.camName}`}) console.log("Rejected"); } console.log("Going to save file now..."); // ... blah blah more code ... })} let settledPromises = await Promise.allSettled(ingestPromises) console.log('All promises settled :>> ', settledPromises);

Cuando ejecuto esto contra un uri no válido, la función retrieveImageFromURI arroja un error de tiempo de espera como se esperaba. Esto omite el mensaje "Registrar X ingestión exitosa..." y salta al bloque catch como se esperaba. Sin embargo, entonces las cosas van inesperadamente.

La salida del código anterior, cuando retrieveImageFromURI arroja un error, se ve así:

 Going to reject Rejected Going to save file now... All promises settled :>> [ { status: 'rejected', reason: { Task: 'Attempting to pull image from camera (TEST Camera)' } }]

Espero que el rechazo detenga cualquier procesamiento adicional dentro de esa promesa (como lo haría una devolución) y NO vería 'Rechazado' ni 'Voy a guardar el archivo ahora...' console.logs...

¿Qué estoy malinterpretando aquí?

about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

Agregue return para detener la ejecución, ya que el reject es solo una función, no puede hacer que la función deje de ejecutarse.

 try { // ... } catch (err) { console.log("Going to reject"); reject({ 'Task': `Attempting to pull image from camera (${camera.camName}` }); console.log("Rejected"); return; }

Si tiene una cláusula finally , deberá agregar una variable para realizar un seguimiento:

Nota: Esto no es útil aquí, ya que se supone que finally debe ejecutarse independientemente de si se produjo la catch , pero si tiene comprobaciones adicionales dentro de la catch , el return irá a finally , por lo que se necesita una variable adicional.

 let shouldReturn = false; try { // ... } catch (err) { console.log("Going to reject"); reject({ 'Task': `Attempting to pull image from camera (${camera.camName}` }); console.log("Rejected"); let shouldReturn = true; return; } finally { if (shouldReturn) return; }
about 4 years ago · Juan Pablo Isaza Report

0

No hay nada especial en invocar el rechazo. Es solo una función. Si desea evitar el procesamiento posterior, su función debería return .

 try { imageBuffer = await retrieveImageFromURI(camera.ing_uri) console.log(`Record #${i} Successful Ingestion from URI`); } catch (err) { console.log("Going to reject"); reject({ 'Task': `Attempting to pull image from camera (${camera.camName}`}) console.log("Rejected"); return; }
about 4 years ago · Juan Pablo Isaza Report

0

¿Debo regresar después de una resolución/rechazo anticipado? indica que el primer reject (o una resolve ) definirá el valor cumplido de una Promesa, pero activamente NO detienen la ejecución y se necesita una devolución.

about 4 years ago · Juan Pablo Isaza 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!