[Javascript] Promise

2023. 3. 1. 20:45공부 중/Node.js

1. Promise

 

Jest를 공부하면서 비동기 처리와 관련한 내용이 나왔다.

 

비동기 처리를 편하게 도와주는 Promise 객체에 대해서 배웠고 활용해 보았다.

 

 

Promise를 활용하는 것에 있어서 중요한 포인트는 2가지다.

  • State : 현재 비동기 작업의 진행 상태로 Pending(처리중), Reject(실패), Fufilled(성공)
  • Producer와 Consumer : 정보를 제공하는 P와 소비하는 C를 이해해야 한다.

 

// Producer
const promise = new Promise((resolve, reject) => {
    setTimeout(()=> {    # 비동기 함수
        try {
        setTimeout(()=>{
          resolve('Success!');} # 처리에 성공하고 결과값을 반환
                , 3000);
        } catch (error) {
                reject(new Error('Error!')); # 처리에 실패하고 원인을 반환
        }
};

// Consumer
promise
    .then(value =>{        //성공
        console.log(value);
    })
    .catch(error=>{        //실패
        console.log(error);
    });
    .finally(()=>{        //성공과 실패와는 상관없이 마지막에 실행
        console.log('finally');
    });

// Promise chaining
const fetchNumber = new Promise((resolve, reject)=>{
    setTimeout(()=>resolve(1),1000);
});

fetchNumber   //비동기의 연속
.then(num => num * 2)
.then(num => num * 3)
.catch(error => {    // 위에서 에러 생기면 발동
    return '6'
})
.then(num => num * 4)
.then(num => num * 5)
.then(num => {
    return new Promise((resolve, reject) => {
        setTimeout(() => resolve(num - 1), 1000);
    });
})
.then(num => console.log(num));

Promise 객체는 선언과 동시에 작업을 처리하니깐 선언되는 위치를 조심해야 한다.

작업을 수행할 것이 확정되는 순간 선언하도록 하자.

 

아래는 구체적으로 promise를 활용하는 사례다.

 

 

[Jest] Testing Asynchronous Code

0. 참고자료 Testing Asynchronous Code · Jest It's common in JavaScript for code to run asynchronously. When you have code that runs asynchronously, Jest needs to know when the code it is testing has completed, before it can move on to another test. Je

ramen4598.tistory.com

 


'공부 중 > Node.js' 카테고리의 다른 글

[Jest] Matcher  (0) 2023.03.01
[Jest] node.js 테스트 프레임워크  (0) 2023.03.01
2023-02-19 node.js_17  (0) 2023.02.19
2023-02-18 node.js_16  (0) 2023.02.18
2023-02-13 node.js_15  (0) 2023.02.13