⊗jsSpPrmFC 171 of 294 menu

JavaScript에서 이행된 Promise 생성하기

때로는 이미 완료된 Promise를 생성해야 할 때가 있습니다. 이를 위한 두 가지 메서드가 있습니다: Promise.resolve 메서드는 성공적으로 이행된 Promise를 생성하고, Promise.reject 메서드는 거부된 Promise를 생성합니다. 이 메서드들의 매개변수는 각각 Promise의 결과 또는 오류가 될 값을 받습니다.

왜 이미 이행된 Promise가 필요할까요? 예제를 통해 살펴봅시다. 어떤 숫자를 매개변수로 받아 비동기적으로 처리하고 결과를 가진 Promise를 반환하는 함수가 있다고 가정해 봅시다:

function func(num) { return new Promise(function(resolve) { setTimeout(function() { resolve(num * num); }, 3000); }); }

우리는 이 함수를 다음과 같이 사용할 것입니다:

func(5).then(function(res) { console.log(res); // 25를 출력합니다 });

이제 우리는 양수일 때만 비동기 연산을 수행하기로 결정했다고 가정해 봅시다. 그렇지 않으면 함수의 결과는 0이어야 합니다:

function func(num) { if (num > 0) { return new Promise(function(resolve) { setTimeout(function() { resolve(num * num); }, 3000); }); } else { return 0; // 제로 결과 } }

그러나 이제 함수는 Promise 또는 숫자를 반환하게 됩니다. 이 때문에 함수 결과에 then 메서드를 적용할 수 없게 되었습니다. 함수가 숫자를 반환하는 경우 오류가 발생하기 때문입니다:

func(0).then(function(res) { // 오류: 숫자 0에 then 메서드를 적용합니다 });

이 문제는 Promise.resolve를 사용하여 해결할 수 있습니다:

function func(num) { if (num > 0) { return new Promise(function(resolve) { setTimeout(function() { resolve(num * num); }, 3000); }); } else { return Promise.resolve(0); // 숫자가 아닌 Promise를 반환합니다 } }

이제 전달된 숫자가 0일 때는 0을 반환하고, 음수일 때는 예외를 발생시키기로 결정했다고 가정해 봅시다. 이 경우 Promise.reject 메서드가 도움이 될 것입니다:

function func(num) { if (num > 0) { return new Promise(function(resolve) { setTimeout(function() { resolve(num * num); }, 3000); }); } else if (num === 0) { return Promise.resolve(0); } else { return Promise.reject('incorrect number'); // 거부된 Promise를 반환합니다 } }
한국어
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
우리는 웹사이트 운영, 분석 및 개인화를 위해 쿠키를 사용합니다. 데이터 처리는 개인정보 처리방침에 따라 이루어집니다.
모두 수락 설정 거부