[JavaScript] 동기와 비동기 - 비동기② Promise

Suvina·2024년 4월 2일

JavaScript

목록 보기
12/28
post-thumbnail

Promise

비동기 작업의 성공 또는 실패에 대한 결과를 나타내는 객체

promise state)

대기(Pending) : 약속이 아직 이행되지 않은 상태
이행(Fulfilled) : 약속이 이행되어 성공적으로 완료된 상태
거부(Rejected) : 약속이 실패한 상태

예시)
const myPromise = new Promise((resolve, reject) => {

	// 비동기 작업 수행
    const data = fetch('서버로부터 요청할 URL');
    
    if(data)
    	resolve(data); // 만일 요청이 성공하여 데이터가 있다면
    else
    	reject("Error"); // 만일 요청이 실패하여 데이터가 없다면
})

myPromise
    .then((value) => { // 성공적으로 수행했을 때 실행될 코드
    	console.log("Data: ", value); // 위에서 return resolve(data)의 data값이 출력된다
    })
    .catch((error) => { // 실패했을 때 실행될 코드
     	console.error(error); // 위에서 return reject("Error")의 "Error"가 출력된다
    })
    .finally(() => { // 성공하든 실패하든 무조건 실행될 코드
    	
    })

프로미스 체이닝

프로미스 핸들러를 연달아 연결하는 것을 말한다. 이렇게 하면 여러 개의 비동기 작업을 순차적으로 수행할 수 있다는 특징이 있다

function doSomething() {
  return new Promise((resolve, reject) => {
      resolve(100)
  });
}

doSomething()
    .then((value1) => {
        const data1 = value1 + 50;
        return data1
    })
    .then((value2) => {
        const data2 = value2 + 50;
        return data2
    })
    .then((value3) => {
        const data3 = value3 + 50;
        return data3
    })
    .then((value4) => {
        console.log(value4); // 250 출력
    })

단점 ) 지나친 .then() 사용으로 가독성이 떨어질 수 있음

참고 : https://inpa.tistory.com/entry/JS-%F0%9F%93%9A-%EB%B9%84%EB%8F%99%EA%B8%B0%EC%B2%98%EB%A6%AC-Promise
profile
개인공부

0개의 댓글