[자바스크립트] Promise

Whatever·2022년 2월 7일
0

자바스크립트

목록 보기
18/24

Promise

1. 만들어진 이유:

Promise 이전에 복잡한 비동기 로직을 callback 함수로 구현하는 경우,
callback속에 callback, 그 속에 다시 callback... 식으로 코드가 엄청 복잡해져서 callback hell으로 불리었음

2. 사용 이유:

비동기 메서드에서 동기 메서드처럼 값을 바로 받고 싶을 때, 미래의 어떤 시점에 결과를 제공하겠다는 뜻으로 promise객체를 반환한다.
요즘 나오는 라이브러리 중 비동기는 return 값이 거의 promise임.

3. 사용

  • promise가 사용될 때는 return 값이 promise일 때 - 비동기를 사용할 때 쓴다.
  • 제대로 끝났을 때 실행되는 것이 then, 에러 발생시 실행되는 것이 catch
  • 값이 결정된 시점에 정상적으로 완료되면 resolve로 값을 넘기고, 예외가 발생하면 reject로 넘긴다.
  • then일 때는 resolve, catch(에러발생시)는 reject가 실행된다.

Promise.html

<!DOCTYPE html>
<html lang='ko'>
<head>
<meta charset='UTF-8'>
<title>Document</title>
</head>
<body>
<script>
    // Promise 짱 중요, 다행인건 개발자가 Promise를 직접 만들 일은 거의 없음
    // 잘 사용하기 위해서 이해가 필수!
    // Promise 이전에 복잡한 비동기 로직을 callback 함수로 구현하는 경우
    // callback속에 callback, 그 속에 다시 callback... 식으로 
    // 코드가 엄청 복잡해져서 callback hell으로 불리었음

    // promise가 사용될 때는 return 값이 promise일 때 - 비동기를 사용할 때 쓴다.
    // 제대로 끝났을 때 실행되는 것이 then, 에러 발생시 실행되는 것이 catch
    // 요즘 나오는 라이브러리 중 비동기는 return 값이 거의 promise임.

    let f_promise = function(p_sec){
        return new Promise((resolve,reject)=>{
            setTimeout(()=>{
                if(p_sec >= 3000){
                    resolve("잘났다");
                }else{
                    var v_error = new Error("에러객체생성");
                    reject(v_error);
                }
            }, p_sec);
        });
    }

    f_promise(3000).then((p_rslt)=>{
        console.log(p_rslt);
    }).catch((err)=>{
        console.log(err);
    });
    
    f_promise(2000).then((p_rslt)=>{
        console.log(p_rslt);
    }).catch((err)=>{
        console.log(err);
    });

    //값이 결정된 시점에 resolve로 넘기고 에러가 나면 reject로 넘긴다.
    //return값이 promise면 then이나 catch만 쓰면 된다.
    //then일 때는 resolve, catch(에러발생시)는 reject가 실행된다.

/*     f_promise().then((p_rslt)=>{ //then 성공했을 때, catch 실패했을 때
        alert(p_rslt);
    }).catch((p_rslt)=>{
        alert("에러"+p_rslt);
    }).finally(()=>{
        alert("무조건 실행되어요");
    }) */
</script>
</body>
</html>

0개의 댓글