Go와 같은 Javascript 오류 처리
9160 단어 experimentintermediatejavascript
소개?
오류 처리의 패턴이나 모양이 다른 것보다 더 편리한 것 같습니다. 컨텍스트와 예외가 발생했을 때 해야 할 일에 따라 오류를 다르게 처리하는 자신을 발견했습니다.
그런 다음 제가 사용하고 있는 오류를 처리하는 다양한 방법을 기록하고 새로운 것을 약간 실험하는 것이 유용할 수 있다고 생각했습니다.
이 기사에서는 데이터와 오류를 사용하는 일반적인 방법과 Go 프로그래밍 언어에서 일반적인 예외 처리에 접근하는 방법을 보여줍니다(면책 조항: 저는 Go 개발자가 아닙니다).
나는
async
/Promise
기반 코드에 초점을 맞출 것입니다.오류 처리, 대체 1
try {
const data = await somethingThatCanFail()
// do something with the `data`
} catch(error) {
// handle the `error`
}
오늘날 오류를 처리하는 가장 일반적인 방법일 가능성이 높습니다.
오류 처리, 대체 2
somethingThatCanFail()
.then((data) => { /* do something with the `data` */ })
.catch((error) => { /* do something with the `error` */ })
반대로
async
/await
가 주류가 되기 전에 오류를 처리하는 가장 일반적인 방법입니다.오류 처리, 대체 3
try {
await somethingThatCanFail()
.then((data) => { /* do something with the `data` */ })
} catch(error) {
// handle the `error`
}
이것은
data
로 많은 작업을 수행할 필요가 없는 방식으로 사용할 수 있지만 error
를 처리하기 위해 간단한 작업 이상의 작업을 수행해야 합니다..then
를 사용했지만 await
가 필요합니다. 그렇지 않으면 문제가 있는 경우catch
얻을 수 없습니다.오류 처리, 대체 4
const data = await somethingThatCanFail()
.catch((error) => { /* do something with the `error` */ })
// do something with the `data`
이는 오류에 대해 많은 작업을 수행할 필요가 없거나
error
콜백 외부에서 catch
자체에 액세스할 필요가 없는 경우에 사용할 수 있습니다. try
/catch
블록의 추가 중첩에서 "저장"되므로 문제를 보다 간결하게 처리하는 데 도움이 될 수 있습니다.오류 처리, 아이디어
어디서도 이 접근 방식을 본 적이 없는 것 같아서 이 "모양"이 나에게 의미가 있는지 실험해 보고 싶었습니다.
내 생각은 기본적으로 오류를 값으로 처리하는 Go의 접근 방식을 빌리는 것입니다.
f, err := os.Open("filename.ext")
if err != nil {
log.Fatal(err)
}
// do something with the open *File f
Go here: https://go.dev/blog/error-handling-and-go에서 오류 처리에 대한 자세한 내용을 읽을 수 있습니다.
최종 결과는 다음과 같을 것이라고 생각했습니다.
const [data, error] = await somethingThatCanFail()
if (error) {
// handle the `error`
}
기본적으로
Promise
가 array
로 바뀌기를 원합니다. 다음과 같이 할 수 있습니다.function promiseToArray(promise) {
return promise
.then(data => [data])
.catch(error => [undefined, error]);
}
const [data, error] = await promiseToArray(somethingThatCanFail());
if (error) {
// handle the `error`
}
그래서 우리는 거기에 있지만 여전히 구문이 마음에 들지 않습니다. 이것을 조금 개선해 봅시다 ...
Promise.prototype.toGo = function() {
return this
.then(data => [data])
.catch(error => [undefined, error]);
};
const [data, error] = await somethingThatCanFail().toGo();
if (error) {
// handle the `error`
}
// or conversely
if (!error) {
// do something with the `data`
}
이제 나는 그것을 훨씬 더 좋아합니다. 우리는
Promise
프로토타입을 수정하고 있습니다. 이 프로토타입은 최선의 아이디어는 아닐 수 있지만 실험용으로는 훌륭해 보입니다.마지막 생각들
이것을 사용해야합니까? 아마 좋은 생각이 아닐 것입니다. 개인적으로 나는 더 일반적으로 사용되는 패턴을 고수하고 싶습니다.
이 접근 방식은 일부 특정 사용 사례에 유용할 수 있으며, 이 아이디어가 실제로 유용한 다른 아이디어를 촉발할 수도 있습니다.
부인 성명
이 글을 쓰는 동안 누군가가 이미 나보다 훨씬 일찍 이것에 대해 생각했다는 것을 알았습니다. 이 기사를 확인하십시오.
https://blog.grossman.io/how-to-write-async-await-without-try-catch-blocks-in-javascript/
Reference
이 문제에 관하여(Go와 같은 Javascript 오류 처리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ivanalejandro0/handle-javascript-errors-like-in-go-ofd텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)