⊗jsSpPrmChE 169 of 294 menu

JavaScript에서 프로미스 체인의 예외 처리

어떤 이유로든 우리의 프로미스가 오류와 함께 종료된다고 가정해 봅시다:

let promise = new Promise(function(resolve, reject) { setTimeout(function() { reject('error'); }, 3000); });

이 경우 코드 실행은 오류 처리 함수가 있는 then 또는 (먼저 만나는 것에 따라) 첫 번째 catch로 즉시 이동합니다.

첫 번째 상황의 예시입니다:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; }, function(error) { // 실행이 여기로 즉시 이동합니다 } ).then( function(result) { console.log(result); } );

두 번째 상황의 예시입니다:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; } ).catch( function(error) { // 실행이 여기로 즉시 이동합니다 } ).then( function(result) { console.log(result); } );

처리 함수에는 두 가지 선택지가 있습니다: 예외 상황을 처리할 수 있다면, return을 통해 결과를 반환하고 실행은 체인을 따라 계속 진행됩니다. 오류를 처리할 수 없다면, 아무것도 반환하지 않거나 throw를 통해 예외를 발생시킬 수 있습니다. 이 경우 실행은 다음 오류 핸들러 (먼저 만나는 then 또는 catch)로 이동합니다.

일반적으로 체인의 모든 오류는 한 곳에서 처리됩니다: 체인 끝에 catch를 배치합니다:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; } ).catch( function(error) { // 오류 발생 시 여기에 도달합니다 } );

예외는 프로미스 자체에서 발생하거나 체인의 어떤 부분에서든 throw를 통해 발생시킬 수 있습니다:

promise.then( function(result) { return result + '1'; } ).then( function(result) { if (allGood) { return result + '2'; } else { throw new Error('error'); // 가장 가까운 핸들러로 이동합니다 } } ) .then( function(result) { return result + '3'; } ).catch( function(error) { // 가장 가까운 핸들러 } );

catch는 정확히 오류 진단을 위해 필요하다는 점을 명심하세요: 오류가 해결 가능한지 여부입니다. 오류가 해결 가능하다면, catch는 그 해결책을 바로 다음 then에 전달해야 합니다. 해결할 수 없는 경우 (또는 해당 catch가 해결 방법을 단순히 모르는 경우), 우리는 아무것도 반환하지 않거나 예외를 발생시켜야 합니다:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; } ).catch( function(error) { if (errorSolvable) { return 'data'; // 다음 then으로 보냅니다 } else { // 아무것도 반환하지 않거나 예외를 발생시킵니다 } } ).then( function(result) { // 여기서 오류를 해결합니다 } );
한국어
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақКыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
우리는 웹사이트 운영, 분석 및 개인화를 위해 쿠키를 사용합니다. 데이터 처리는 개인정보 처리방침에 따라 이루어집니다.
모두 수락 설정 거부