카테고리 없음

[JS]Promise

ehddkDEV 2024. 8. 23. 10:08

promise란?

결과를 제공하겠다는 약속을 말한다.

 

비동기 작업이 맞이할 미래의 결과값을 나타낸다.이전에는  콜백함수를 사용함으로써 함수 내부에서 또 다른 함수를 호출해 후속 처리 작업을 했지만 ..가독성도 안좋고 코드 길이도 길어지면서 콜백지옥(callback hell)이 발생하곤했다!

 

그래서 이를  해결하고자 promise 객체가 등장했다.

 

🚩생성하기

const 변수명 = new Promise((resolve,reject) => { } )

promise 생성자 함수로 생성한다.

이때 ,resolves는 성공의 상태를 뜻하고 reject는 거부의 상태를 뜻한다.

 

🚩객체 처리

성공하여 resolve(data)를 호출하면,

.then() : 성공처리

.catch(): rejected된 결과 반환 처리

.finally(): 성공이든 실패든 상관없이 항상 동작이 종료 되기전 마지막에 실행한다!

 

🚩상태

- pending: 대기

<settled>

- fullfilled : 성공(=resolved)

- rejected : 처리 실패

 

settled 상태(=결과가 나온)가 되어야 체인 이동이 가능하다.

 

<async/await>

await: 해당 동작이 settled가 될 때 까지 기다림.

 

await는 async 함수 안에서만 동작하며, promise가 처리될 때까지 함수 실행을 기다리는 것이다.

 

async function f() {

  let promise = new Promise((resolve, reject) => {
    setTimeout(() => resolve("완료!"), 1000)
  });

  let result = await promise; // 프라미스가 이행될 때까지 기다림 (^)

  alert(result); // "완료!"
}

f();

 

 

^가 있는 줄에서 잠시 멈춰서 기다렸다가 promise가 처리되면 실행이 재개되어 result값이 나온다.

이렇게 기다리는 동안엔 엔진이 다른 일(다른 스크립트를 실행, 이벤트 처리 등)을 할 수 있기 때문에, CPU 리소스가 낭비되지 않는다고 한다!