>웹 프론트엔드 >JS 튜토리얼 >시도/캐치 및 약속 거부를 사용하여 비동기 자바 스크립트 코드의 오류를 어떻게 처리합니까?

시도/캐치 및 약속 거부를 사용하여 비동기 자바 스크립트 코드의 오류를 어떻게 처리합니까?

Johnathan Smith
Johnathan Smith원래의
2025-03-12 16:37:17146검색

시도/캐치 및 약속 거부로 비동기 JavaScript의 오류 처리

비동기식 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 )을 나타 내기 위해 사용자 정의 오류 클래스를 작성하십시오. 이를 통해보다 타겟팅 된 오류 처리 및 디버깅이 가능합니다.
  • 자세한 오류 메시지 : 타임 스탬프, 사용자 컨텍스트 (해당되는 경우) 및 디버깅에 도움이되는 관련 데이터와 같은 오류 메시지에 포괄적 인 정보를 포함시킵니다. "무언가가 잘못되었다"와 같은 모호한 오류 메시지를 피하십시오.
  • 로깅 : 오류 및 컨텍스트를 캡처하기 위해 강력한 로깅을 구현합니다. 로깅 라이브러리 (예 : Winston, Bunyan)를 사용하여 구조화 된 로깅과 더 쉬운 분석을 용이하게하십시오. 더 쉬운 디버깅을 위해 스택 추적을 포함시킵니다.
  • 사용자 친화적 인 오류 메시지 : 사용자에게 오류를 제시 할 때는 기술적 인 세부 정보를 표시하지 마십시오. 대신, 문제를 설명하고 가능한 솔루션을 제안하는 명확하고 간결하며 사용자 친화적 인 메시지를 제공하십시오.
  • 오류 경계 (UI 프레임 워크) : 사용자 인터페이스를 구축하는 경우 전체 애플리케이션을 충돌시키지 않고 구성 요소의 오류를 우아하게 처리하도록 오류 ErrorBoundary 를 활용하십시오.

Async/Await 사용 시도/캐치 블록으로 기다립니다

예, 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() 문을 배치합니다. 비동기 작업 전후에 관련 데이터를 기록합니다.
  • 디버거 : 브라우저의 개발자 도구 (또는 Node.js 디버거)를 사용하여 코드를 따라 라인별로 단계별로 진행하십시오. 비동기 작업 전후에 중단 점을 설정하여 변수를 검사하고 오류 소스를 식별하십시오.
  • 오류 모니터링 도구 : 생산 애플리케이션의 경우 자동으로 처리되지 않은 예외를 캡처하고 상세한 스택 추적을 제공하며 오류 빈도 및 패턴에 대한 통찰력을 제공하는 오류 모니터링 도구 (예 : Sentry, Rollbar)를 사용합니다.
  • 약속 검사 : 약속을 사용하는 경우 거부 된 약속 개체를 검사하여 스택 추적과 같은 오류에 대한 정보를 얻으십시오.
  • 비동기 로깅 : 메인 스레드 차단 및 잠재적으로 마스킹 오류를 막기 위해 로깅 문이 비동기식으로 처리되도록합니다.
  • 코드 단순화 : 복잡한 비동기 코드를 디버그하는 데 어려움을 겪고 있다면 더 작고 관리하기 쉬운 기능으로 분류하여 단순화하십시오. 따라서 오류의 소스를 더 쉽게 분리 할 수 ​​있습니다.

위 내용은 시도/캐치 및 약속 거부를 사용하여 비동기 자바 스크립트 코드의 오류를 어떻게 처리합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.