Javascript - 避免模块循环依赖(组织问题?)
Javascript - avoiding module circular dependency (organization issue?)
我完全不知道如何避免这种循环依赖。我有一个发送电子邮件的 TS 模块和一个处理错误的模块。错误处理程序写入数据库并发送电子邮件。电子邮件发送者需要能够处理错误。然后大多数应用程序都使用它们。
例如:
emailer.js
import err from "error-handler.js"
function sendEmail() {
try { trySendEmail() }
catch(e) { err(e) }
}
错误-handler.js
import sendEmail from "emailer.js"
function err(e) {
sendEmail("Error Occurred", e)
}
有没有正确的方法来处理这种情况?感谢您的帮助!
a) 绝对没有理由不在这里使用循环依赖 - 两个模块 do 相互依赖,并且您编写的代码按原样工作ES6 模块,完全没有问题。这与将两个函数声明放在同一个文件中没有什么不同。
b) 打破依赖链,改用依赖注入。要么有
// 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)
}
或
// 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)
}
如果您仍然需要在您的项目中同时使用这两者,而不在任何一个中注入依赖项,您将需要第三个模块,它依赖于这两个模块并且确实导出一个注入了依赖项的函数。
我完全不知道如何避免这种循环依赖。我有一个发送电子邮件的 TS 模块和一个处理错误的模块。错误处理程序写入数据库并发送电子邮件。电子邮件发送者需要能够处理错误。然后大多数应用程序都使用它们。
例如:
emailer.js
import err from "error-handler.js"
function sendEmail() {
try { trySendEmail() }
catch(e) { err(e) }
}
错误-handler.js
import sendEmail from "emailer.js"
function err(e) {
sendEmail("Error Occurred", e)
}
有没有正确的方法来处理这种情况?感谢您的帮助!
a) 绝对没有理由不在这里使用循环依赖 - 两个模块 do 相互依赖,并且您编写的代码按原样工作ES6 模块,完全没有问题。这与将两个函数声明放在同一个文件中没有什么不同。
b) 打破依赖链,改用依赖注入。要么有
// 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)
}
或
// 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)
}
如果您仍然需要在您的项目中同时使用这两者,而不在任何一个中注入依赖项,您将需要第三个模块,它依赖于这两个模块并且确实导出一个注入了依赖项的函数。