비동기 코드에서 최상위로 에러 전파하기

class Test1 {
	constructor({ onSearch }) {
		this.onSearch = onSearch
		document.addEventListener("click", this.onSearch)
	}
}

class Test2 {
	constructor({ onSearch }) {
		this.onSearch = onSearch
		document.addEventListener("click", this.onSearch)
	}
}

class App {
	constructor() {
		this.init()
	}

	init() {
		this.Test1 = new Test1({
			onSearch: () => {
				throw "error" // 여기에서 던진 에러를 1
			}
		})

		this.Test2 = new Test2({
			onSearch: () => {
				throw "error" // 여기에서 던진 에러를 2
			}
		})
	}
}

try {
	const app = new App()
} catch(e) {
	alert(e) // 이곳에서 잡을 방법은 없을까요?
}

에러핸들링하다가 궁금한게 있어서 질문드립니다! 각각의 클래스가 App.js에 존재하고 클래스의 비동기 코드에서 에러가 발생할 경우 최상위 try ~ catch 구문에 전파를 하여 에러를 핸들링하고 싶습니다. 이렇게 한다면 한 곳에서 에러 관리를 할 수 있어서 편할거 같아 시도중인데 도저히 방법을 잘 모르겠네요… 불가능한걸까요?

EventEmitter로 에러를 emit해주고 on으로 받는 방법을 사용해보세요.
onSearch 함수에서 throw한 에러는 onSearch를 실행한 쪽에서 받을 수 있는 에러이지, App 클래스가 받을 수 있는 에러는 아닙니다.

1 Like

답변 감사합니다!