비동기식 JavaScript의 오류 처리에는 동기 코드와 다른 미묘한 접근 방식이 필요합니다. try...catch
블록은 동기 오류를 처리하지만 종종 약속이나 비동기/기다리는 비동기 작업에는 다른 전략이 필요합니다. .catch()
.then()
비동기 조작이 실패하면 약속을 거부하고 .catch()
블록이 오류를 처리합니다. try...catch
블록은 약속이 해결되거나 거부되기 전에 발생하는 오류 만 포착합니다.
설명하자 :
<code class="javascript">function asyncOperation() { return new Promise((resolve, reject) => { // Simulate an asynchronous operation that might fail setTimeout(() => { const randomNumber = Math.random(); if (randomNumber console.log(result)) .catch(error => console.error("Caught an error:", error));</code>
이 예에서 asyncOperation
기능은 약속을 반환합니다. 임의의 숫자가 0.5 미만인 경우 약속은 "성공!"으로 해결됩니다. 그렇지 않으면 오류 객체로 거부합니다. .catch()
블록은 구체적으로 거부 된 약속을 처리하여 처리되지 않은 거부 오류를 방지합니다. 시도 ... asyncOperation()
호출 주위에 배치 된 try...catch
블록은 try
블록의 실행 후 오류가 발생하기 때문에 오류가 발생하지 않습니다.
try...catch
와 약속은 기본적이고 강력한 비동기 오류 처리는 추가 모범 사례가 필요합니다.
.catch()
블록을 흩어지는 대신 중심 오류 처리 메커니즘을 고려하십시오. 여기에는 모든 처리되지 않은 오류를 가로 채고 기록하는 사용자 정의 오류 처리기 기능 또는 미들웨어 계층 (React 또는 Express와 같은 프레임 워크를 사용하는 경우)이 포함될 수 있습니다. 이렇게하면 유지 관리가 향상되고 일관된 오류보고가 가능합니다.Error
객체 만 포착하지 마십시오. 응용 프로그램 내에서 특정 오류 유형 (예 : NetworkError
, AuthenticationError
, DatabaseError
)을 나타 내기 위해 사용자 정의 오류 클래스를 작성하십시오. 이를 통해보다 타겟팅 된 오류 처리 및 디버깅이 가능합니다.ErrorBoundary
를 활용하십시오. 예, try...catch
와 함께 async/await
효과적으로 사용할 수 있습니다 ... 비동기 JavaScript 함수의 오류를 처리하기 위해 캐치 블록을 잡을 수 있습니다. async/await
비동기 코드를 보이게 만들고 동기 코드와 비슷하게 행동하여 오류 처리가 더 직관적입니다. try...catch
블록은 async
함수 내에서 발생하는 오류를 포착합니다.
<code class="javascript">async function asyncOperationWithAwait() { try { const result = await asyncOperation(); // asyncOperation from previous example console.log(result); } catch (error) { console.error("Caught an error using async/await:", error); } } asyncOperationWithAwait();</code>
이 예에서 try
Block은 asyncOperation
실행하려고 시도합니다. asyncOperation
거부되면 catch
블록이 오류를 처리합니다. 이 접근법은 .then()
및 .catch()
사용하는 것보다 깨끗하고 읽기 쉽습니다.
오류가 즉시 또는 예측 가능한 순서로 발생하지 않기 때문에 비동기 코드를 디버깅하는 것은 어려울 수 있습니다. 효과적인 디버깅 전략은 다음과 같습니다.
console.log()
문을 배치합니다. 비동기 작업 전후에 관련 데이터를 기록합니다.위 내용은 시도/캐치 및 약속 거부를 사용하여 비동기 자바 스크립트 코드의 오류를 어떻게 처리합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!