Estoy completamente perplejo sobre cómo evitar esta dependencia circular. Tengo un módulo TS que envía correos electrónicos y uno que maneja errores. El controlador de errores escribe en una base de datos y envía correos electrónicos. Y el remitente de correo electrónico debe poder manejar los errores. Entonces, la mayoría de las aplicaciones usan ambos.
Por ejemplo, algo como:
emailer.js
import err from "error-handler.js" function sendEmail() { try { trySendEmail() } catch(e) { err(e) } }manejador de errores.js
import sendEmail from "emailer.js" function err(e) { sendEmail("Error Occurred", e) }¿Hay una manera correcta de manejar esta situación? ¡Gracias por tu ayuda!
a) no hay absolutamente ninguna razón para no usar una dependencia circular aquí: los dos módulos dependen el uno del otro, y el código que ha escrito funciona tal cual con los módulos ES6, sin ningún problema. No es diferente de poner ambas declaraciones de funciones en el mismo archivo.
b) romper la cadena de dependencia y usar la inyección de dependencia en su lugar. o tener
// emailer.js function sendEmail(text, handleError) { try { trySendEmail(text) } catch(e) { handleError(e) } } // error-handler.js import sendEmail from "emailer.js" function err(e) { sendEmail("Error Occurred: "+e.message, err) }o
// emailer.js import err from "error-handler.js" function sendEmail(text) { try { trySendEmail(text) } catch(e) { err(e, sendEmail) } } // error-handler.js function err(e, sendEmail) { sendEmail("Error Occurred: "+e.message) }Si aún necesita usar ambos en su proyecto, sin inyectar una dependencia en ninguno, necesitará un tercer módulo que dependa de ambos y exporte una función con la dependencia inyectada.