본문 바로가기
JaveScript

Promise

by 원더링 2022. 6. 29.

Promise

 

 

▶ 비동기 처리에 사용되는 객체이며 주로 서버에서 받아온 데이터를 화면에 표시할 때 사용한다.

 

 

▶ executor는 promise의 자체 내장함수이며 함수를 적는 공간이라고 생각하면 된다. resolve, reject 중 하나는 반드시 호출해야 한다.

 

 

▶ 아래처럼 사용하면 되며 인자가 resolve, reject인 콜백 함수를 선언하면 된다.

 

new Promise(function(resolve, reject) { 
    // executor
});

 

 

▶ resolve(value) => promise가 정상적으로 이행된다면 resolve의 value를 반환한다.

 

new Promise(function(resolve, reject) {
    // executor
    // executor에 작성된 코드는 promise가 만들어지면 따로 호출코드를 작성하지 않아도 자동으로 실행됨
    setTimeout(() => resolve('실행완료'), 2000);
});

 

 

▶ reject(error) => promise가 거부될 경우 에러 객체를 나타내는 error를 반환한다.

 

new Promise(function(resolve, reject) {
    // executor
    setTimeout(() => reject(new Error('에러')), 2000);  // Error: 에러
});

 

 

 

Then

 

 

executor의 결과나 에러를 받아서 출력해주는 역할을 한다. promise가 이행된다면 첫 번째 줄의 함수가 실행되며, 거부된다면 두 번째 줄의 함수가 실행됩니다.

 

// promise가 이행됨
function test1() {
    return new Promise(function(resolve, reject) {
        resolve('결과');
    })
};

test1().then(
    // 1번째 줄
    function() {
        console.log('결과가 나왔습니다.');
    },

    // 2번째 줄
    function() {
        console.log('문제가 발생했습니다.');
    }
);

// 결과가 나왔습니다.



// promise가 거부됨
function test2() {
    return new Promise(function(resolve, reject) {
        reject(new Error('error'));
    })
};

test2().then(
    // 1번째 줄
    function() {
        console.log('결과가 나왔습니다.');
    },

    // 2번째 줄
    function() {
        console.log('문제가 발생했습니다.');
    }
);

// 문제가 발생했습니다.

 

 

 

Catch

 

 

▶ 에러가 발생한 경우 실행된다.

 

 

▶ then의 두번째 줄 함수와 하는 역할이 같으나 catch를 사용하기를 권장한다.

 

function test() {
    return new Promise(function(resolve, reject) {
        reject(new Error('error'));
    })
};

test().then(
    function() {
        console.log('결과가 나왔습니다.');
    }
)
.catch(
    function(error) {
        console.log(error.name);
});

// error

 

 

 

Promise Chaining

 

 

▶ promise를 연결한다는 의미이다.

 

 

▶ 아래의 코드처럼 promise를 연계시킬 수 있다.

 

function one() {
    return new Promise(function(resolve) {
        resolve(8);
    })
};


function two(second) {
    return new Promise(function(resolve) {
        resolve(second * 3);
    })
};


function three(third) {
    return new Promise(function(resolve) {
        resolve(`정답은 ${third * 6} 입니다.`);
    })
};


one()
.then(
    function(first) {  // 8이 first가 됨
        return two(first);  // first를 two함수의 인자(second)로 넣고 two함수 실행
    }
)

.then(
    function(second) {  // 24가 second가 됨
        return three(second);  // second를 three함수의 인자(third)로 넣고 three함수 실행
    }
)

.then(
    function(third) {  // third가 144가 됨
        console.log(third);  // 144
    }
);

 

 

 

 

'JaveScript' 카테고리의 다른 글

Json  (0) 2022.06.30
async & await  (0) 2022.06.30
자바스크립트의 실행 순서(동기, 비동기)  (0) 2022.06.28
Try & Catch & Finally  (0) 2022.06.23
Throw  (0) 2022.06.23