프로그래밍 언어와 기술/JavaScript

[JavaScript] 프로미스

tero1115 2023. 7. 13. 11:16

동기

 - 판매자가 택배상자 상품에 넣기

 - 구매자가 택배상자 받기

 - 구매자가 택배상자 열기

 - 구매자가 상품 꺼내기

--------------------------------------------------------------------------

프로미스 - 상품이 나중에 들어오는 택배상자

 - 판매자가 택배상자를 판매자에게 보냄

 - 구매자가 택배상자를 받았으나 안에 상품이 없는 상태

 - 상품이 없으면 안열림 / 상품이 있으면 자동으로 열림

 

 


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>

        const bool = true;

        // 프로미스
        const promise = new Promise((resolve, reject)=>{
            // 프로미스 내에서 작업을 하고
            // 작업이 성공하면 resolve 실행 / 실패하면 reject 실행
            setTimeout(() => {
                if (bool) {
                resolve("작업성공");
                } else {
                    reject("작업실패");
                }
            }, 3000);
        });

        promise
            // 결과가 resolve로 나오면 then안에 있는 콜백 함수가 실행된다
            .then((value)=>{
                console.log(value);
            })
            // 결과가 reject 나오면 catch안에 있는 콜백 함수가 실행된다
            .catch((value)=>{
                console.log(value);
            })
            // 어떻게 결과가 나오든 무조건 실행된다 
            .finally(()=>{
                console.log("finally");
            });

            console.log("프로미스 작성 이후 코드 실행");

    </script>
</body>
</html>

 

 

 


실습

 - 세탁기 돌리기 1 - 세탁 끝나면 빨래감 널기 2 - 라면 먹기 3
 - 세탁기 돌리기를 Promise
 - 세탁기 돌리기 시작할 때 "세탁을 시작합니다" (메시지 출력 1)
 - 세탁기가 다 돌아가면 "빨래감을 널었습니다" (메시지 출력 3)
 - 라면 다먹으면 "라면을 먹었습니다" (메시지 출력 2)

 

    <script>
        // 동기
        // console.log("세탁을 시작합니다.");
        // console.log("빨래감을 널었습니다.");
        // console.log("라면을 먹었습니다.");

        const 빨래시간 = 2000;

        // 비동기
        console.log("세탁을 시작합니다.");
        new Promise((resolve)=>{
            if (세탁기상태) {
                setTimeout(() => {
                    resolve("빨래완료");
                }, 빨래시간);
            } else {
                reject("세탁기고장");
            }
        }).then(()=>{
            console.log("빨래감을 널었습니다");
        }).catch(()=>{
            console.log("세탁기가 고장났습니다.")
        });
        console.log("라면을 먹었습니다.");

    </script>

세탁기가 고장났습니다는 3초뒤에 출력