ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 23_11_20 JS공부정리
    개발공부/JavaScript 2023. 11. 21. 00:31

    [코딩애플] Part3

     

     

    -Promise : 성공/실패를 판정하는 기계

    let Promise = new Promise(function(resolve, reject){
        resolve(); //이렇게 쓰면 Promise가 성공함
        reject(); //이렇게 쓰면 Promise가 실패함
    }); //프로미스 = 성공/실패를 판정하는 기계

    Promise.then(function() {
        //1번째 실행
    }).then(function() {
        //2번째 실행
    }).catch(function() {
        //실패할 경우
    }).finally(function() {
        //성공이든 실패든 실행하는 함수
    })

     

    let Promise2 = new Promise(function(resolve, reject){
        let 연산 = 1+1;
        resolve(); //'성공했어요'
        reject(); //'실패했어요'
    })

    Promise2.then(function() {
        console.log('성공했어요')
    }).catch(function() {
        console.log('실패했어요')
    })

     

    -파라미터를 넣어 연산값을 전달할 수 있음

    let Promise3 = new Promise(function(resolve, reject){
        let 연산 = 1+1;
        resolve(연산); //2
    })

    Promise3.then(function(결과) {
        console.log(결과)
    }).catch(function() {
        console.log('실패했어요')
    })

     

    -Promise을 이용한 비동기 처리(순차적 처리 가능)

    let Promise4 = new Promise(function(resolve, reject){
        setTimeout(function() {
            성공(); //1초후 '성공했어요'
            //1초가 지나기전엔 프로미스는 pending, 1초후엔 resolved
        }, 1000)
    })

    Promise4.then(function() {
        console.log('성공했어요')
    }).catch(function() {
        console.log('실패했어요')
    })

     

    프로미스의 3가지 상태
    1.pending : 판정 대기중이면
    2.resolved : 성공했을 때
    3.rejected : 실패했을 때

    프로미스가 적용된곳들
    jQuery.ajax()
    fetch()

     

    -이미지 로드상황에서의 Promise 코드 예제

    let Promise5 = new Promise(function(resolve, reject) {
        document.querySelector('#test').addEventListener("load", ()=> {
            resolve();
        })
        document.querySelector('#test').addEventListener("error", ()=> {
            reject();
        })
    })

    Promise5.then(function() {
        console.log('성공')
    }).catch(function(){
        console.log('실패')
    })

     

    -제이쿼리 ajax상황에서의 Promise


    <script>
    let Promise6 = new Promise(function(resolve,reject){
        $.ajax({
        type : 'GET',
        }).done(function(결과){
            resolve(결과)
        })
    })
    Promise6.then(function(결과){
        console.log(결과)
    })

     

    *제이쿼리 ajax문법

    $.ajax({
      type : 'GET',
      url : 'URL 경로'
    }).done(function(결과){
      console.log(결과);
    });


    $.get('URL 경로').done(function(결과){
      console.log(결과)
    });

     

    -Promise 체이닝

    let Promise6 = new Promise(function(resolve,reject){
        $.ajax({
        type : 'GET',
        }).done(function(결과){
            resolve(결과)
        })
    })


    Promise6.then(function(결과){
        console.log(결과)
        let Promise7 = new Promise(function(resolve,reject){ //안에 새로운 promise를 만들어서 반환
        $.ajax({
            type : 'GET',
        }).done(function(결과){
            resolve(결과)
        })})
        return Promise7
    }).then(function(결과){ //반환한 promsie에 연결하여 .then함수 실행
        console.log(결과)
    })

     

    -async/await 문법

    async function 더하기() { //함수 앞에서만 async를 쓸수있음. 함수실행후 Promise 객체가 남음
        console.log(1)
    }
    더하기().then(function(){
        console.log('성공이에요')
    })
    // 1과 '성공이에요'가 차례로 출력됨.

     

    -return을 이용해 연산결과를 넘겨주기도 가능.

    async function 더하기() {
        return 1+1
    }
    더하기().then(function(결과){
        console.log(결과) //2출력.
    })

     

    but async는 성공만 판정할 수 있음.

    async function 더하기(콜백) {
        return Promise.reject('실패') //강제적으로 rejected 상태의 promise를 반환할 순 있음.
    }
    더하기().then(function(결과){
        console.log(결과) //error
    })

     

    -await사용법(async 안에 Promise를 만들기 가능)

    async function 더하기2() {
        let Promise = new Promise(function(resolve,reject){
            let 힘든연산 = 1+1;
            resolve(힘든연산);
        })
        // Promise.then(function(){
        //     console.log('성공했어요')
        // }) 아래 코드와 동일한 의미

        let result = await Promise; //Promise가 해결될때까지 기다림. async 함수 안에서만 사용가능.
        console.log(result); //2
    }

     

    *Promise가 reject되면 await은 Error가 나고 멈춤. => try {이걸해보고안되면} catch {이거하세요} 문법 사용

    async function 더하기2() {
        let Promise = new Promise(function(resolve,reject){
            let 힘든연산 = 1+1;
            reject();
        })
        try {
            let result = await Promise;
            console.log(result);
        }
        catch {
            console.log('에러')
        }
    }

     

    -버튼을 누를때 async 함수가 작동하도록 만들기

    <button id="button">버튼</button>

    <script>
    let Promise1 = new Promise(function(resolve,reject){
        document.querySelector('#button').addEventListener("click", function(){
        resolve();
        })
    })
    async function 버튼() {
        try{
            let result = await Promise1; //생성한 Promise의 이름이 들어가야함.
            console.log('성공했어요');
        } catch {
            console.log('에러')
        }
    }
    버튼();
    </script>

    '개발공부 > JavaScript' 카테고리의 다른 글

    23_11_22 JS공부정리  (2) 2023.11.23
    23_11_21 JS공부정리  (0) 2023.11.21
    23_11_19 JS공부정리  (0) 2023.11.19
    23_11_18 JS공부정리  (0) 2023.11.19
    23_11_16 JS공부정리  (0) 2023.11.16
Designed by Tistory.