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

71
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar

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