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

如果您仍然需要在您的项目中同时使用这两者,而不在任何一个中注入依赖项,您将需要第三个模块,它依赖于这两个模块并且确实导出一个注入了依赖项的函数。