Notice
Recent Posts
Recent Comments
Link
«   2025/11   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
Tags
more
Archives
Today
Total
관리 메뉴

Dev

ES6 (3) : Promise 본문

Programming/Java Script

ES6 (3) : Promise

flutterbylily 2023. 3. 17. 17:20

7) 비동기 함수

 

(1) 비동기 처리

작업 시간을 많이 요하는 작업을 처리하는 동안 다른 작업들이 대기 상태인 경우,

다른 작업들을 먼저 진행하고 오래 걸리는 작업과 그 작업에 관련된 작업을 이후에 처리하는 방식.

 

(2) 프로미스(Promise)

 

✍🏻 프로미스의 상태 세 가지

  • 대기중: 결과를 기다리는 중
  • 처리됨 - 이행됨: 수행이 정상적으로 끝남. 결과값을 갖고 있음
  • 처리됨 - 거부됨: 수행이 비정상적으로 끝남.

 

① 프로미스 생성: new 키워드로 생성.

② Promise.resolve 생성: 이행됨 상태인 프로미스 생성

③ Promise.reject 생성: 거부됨 상태인 프로미스 생성.

④ then : 처리됨 상태가 된 프로미스를 처리할 때 사용하는 메소드.

 

 

기존의 비동기 함수:

function work1(onDone) {
	setTimeout ( () => onDone('작업1 완료.'), 100);
}
function work2(onDone) {
	setTimeout ( () => onDone('작업2 완료.'), 200);
}
function urgentWork() {
	console.log('긴급 작업');
}

work1(function(msg1) {
	console.log('done after 100ms: ' +msg1);
    work2(function(msg2) {
    	console.log('done after 300ms: ' +msg2);
    });
});
urgentWork();

우선 순위: (setTimeout이 걸려있지 않으므로) urgentWork() > work1 > work2

지연 작업(work1, work2, ...)의 수가 늘어날수록 콜백이 계단으로 형성: 콜백 지옥(callback hell) 발생.

 

✍🏻콜백 지옥(callback hell)

- 가독성이 떨어짐(코드가 길어진다)

- 코드 수정이 어려움

- 비즈니스 로직을 한눈에 알아보기 어려움

 

 

ES6의 비동기 처리:

const work1 = () =>
	new Promise((resolve) => {
    	setTimeout(() => resolve('작업1 완료.'), 100);
    });
const work2 = () =>
	new Promise((resolve) => {
    	setTimeout(() => resolve('작업2 완료.'), 200);
    });
const urgentWork = () => {
	console.log('긴급 작업');
}

const nextWorkOnDone = (msg1) => {
	console.log('done after 100ms: ' + msg1);
    return work2();
}
work1()
	.then(nextWorkOnDone)
    
    .then((msg2) => {
    	console.log('done after 300ms: ' + msg2);
    });
urgentWork();

 

 

'Programming > Java Script' 카테고리의 다른 글

ES6 (4) : Array Method  (0) 2023.03.21
ES6 (2)  (0) 2023.03.14
ES6 (1)  (0) 2023.03.13