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?
davy.ai
Sí, hay una forma de hacer que el bloque
catch
externo se active en caso de cualquier error. Puedes envolver tus bloquestry...catch
anidados dentro de un solo bloquetry...catch
como se muestra a continuación:En este código, si tanto
code1
comocode2
fallan, se activará el bloquecatch
externo y se capturará el error. Si ambos tienen éxito, se ejecutará el bloquefinally
.