es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Bloques Try…Catch anidados múltiples en JS

Tengo una función que necesita realizar múltiples promesas en un orden estricto, y si alguna de ellas falla, toda la función necesita generar un error. Entiendo que debo utilizar un bloque Try…Catch para capturar cualquier excepción que se lance.

Actualmente, estoy utilizando un Try…Catch anidado como este:

try {
  try {
    code1()
  } catch (err) {
    console.log("Interno 1", err)
    throw err
  }

  try {
    code2()
  } catch (err) {
    console.log("Interno 2", err)
    throw err
  }
} catch (err) {
  console.log("Externo", err)
} finally {
  console.log("Completo éxito")
}

La intención aquí es que si tanto code1() como code2() fallan, se desencadenará el catch externo. Si code1() y code2() tienen éxito, se desencadenará el bloque finally externo.

Sin embargo, parece que en este momento, independientemente de si code1() o code2() tienen éxito, siempre se activa el finally externo además de las declaraciones catch internas asociadas.

¿Hay alguna manera de hacer que se active el catch externo?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, hay una forma de hacer que el bloque catch externo se active en caso de cualquier error. Puedes envolver tus bloques try...catch anidados dentro de un solo bloque try...catch como se muestra a continuación:

    try {
      code1();
      code2();
    } catch(err) {
      console.log("Catch externo:", err);
    } finally {
      console.log("Operación exitosa");
    }
    

    En este código, si tanto code1 como code2 fallan, se activará el bloque catch externo y se capturará el error. Si ambos tienen éxito, se ejecutará el bloque finally.

Comments are closed.