본문 바로가기

카테고리 없음

J-query 전에 콜백 함수가 모였나 배웟음

 

<html>
    <head>
        <meta charset="UTF-8">
        <title>Front End</title>
        <link rel="icon" href="./img/favicon.png">
        <style>

        </style>
    </head>
    <body>

    </body>
    <script>
        // 비동기의 문제점
        function ansyncEx(){
            let result = 0;
            setTimeout(function(){
                result = 10+20; // 10+20 이라는 로직을 완성하기 전에
                console.log('10+20='+result);
            },100);
            // 기다리지 않고 아래 내용을 실행
            return 'result : '+result;
        }
        console.log(ansyncEx());

        // 콜백 사용시 콜백지옥 발생(2단계 이사상 진행시...)
        // 이것을 해결하기 위해 Promise 객체 라는 것이 등장
        function prom(){
            // resolve : 성공시 실행 함수
            // reject : 실패시 실행 함수
            return new Promise(function(resolve,reject){
                let result = 0;
                setTimeout(function(){
                    result = 10+20; 
                    resolve('result : '+result);
                },100);
            });
        }
        console.log('Promise 객체 활용',prom());//Promise 객체가 나온다.

        //Promise 객체에서 무언가를 꺼내기 위해서는 then() 을 사용
        prom().then(function(data){
            console.log('Promise 에서 꺼내온 값',data);
            data += '!!!!';
            return data;
        }).then(function(data){ // 추가 작업을 하고 싶다면 then()
            console.log(data);
        });


    </script>
</html>

 

<html>
    <head>
        <meta charset="UTF-8">
        <title>Front End</title>
        <link rel="icon" href="./img/favicon.png">
        <style>

        </style>
    </head>
    <body>

    </body>
    <script>
        // 콜백함수로 동작하는 plus, multi, divide 함수
        // (a+b)*c/d
        function plus(a,b){
            return new Promise((resolve,reject)=>{
                setTimeout(()=>{resolve(a+b);},100);
            });
        }

        function multi(a,b){
            return new Promise((resolve,reject)=>{
                setTimeout(()=>{resolve(a*b);},100);
            });
        }

        function divide(a,b){
            return new Promise((resolve,reject)=>{
                setTimeout(()=>{resolve(a/b);},100);
            });
        }
        /* 이렇게 하면 깔끔 할텐데... 이걸 위해 Promise 와 async-await 이 필요
        r1 = plus(3,4);
        r2 = multi(r1,4);
        r3 = divide(r2,2);
        r4 = plus(r3,30);
        */
        // await 이 실행되는 함수에게 일을시키는 함수엔 async 
        async function getResult(){
            //Promise 를 반환하는 함수엔 await 을 달아준다.
            r1 = await plus(3,4);
            console.log('r1 : ',r1);
            r2 = await multi(r1,4);
            console.log('r2 : ',r2);
            r3 = await divide(r2,2);
            console.log('r3 : ',r3);
            r4 = await plus(r3,30);
            console.log('최종 : ',r4);
        }
        getResult();

    </script>
</html>

 

 

<html>
    <head>
        <meta charset="UTF-8">
        <title>Front End</title>
        <link rel="icon" href="./img/favicon.png">
        <style>

        </style>
    </head>
    <body>

    </body>
    <script>
        // callback함수 비동기 상황에서특정한 내용을 실행 후(back), 실행(call)되는 함수
        // 비동기의 문제점 - 기다려 주지 않아
        function plus(a){
            let result = 0;
            setTimeout(function(){
                result = a+10;
            },100);
            console.log(result);
        }

        plus(5);

        // 콜백 활용 - a 값을 주면 그것을 처리해서 callBack 함수에 전해줘
        function plus2(a,callBack){
            setTimeout(function(){
                //result = a+10;
                callBack(a);
            },100);
        } 

        plus2(5,function(a){
            console.log(a+10);
        });

    </script>
</html>

 

<html>
    <head>
        <meta charset="UTF-8">
        <title>Front End</title>
        <link rel="icon" href="./img/favicon.png">
        <style>

        </style>
    </head>
    <body>

    </body>
    <script>
        // 콜백함수로 동작하는 plus, multi, divide 함수
        // (a+b)*c/d
        function plus(a,b,onResult){
            setTimeout(function(){
                onResult(a+b);
            },100);
        }

        function multi(a,b,onResult){
            setTimeout(function(){
                onResult(a*b);
            },100);
        }

        function divide(a,b,onResult){
            setTimeout(function(){
                onResult(a/b);
            },100);
        }

        // a+b 를 더한 값을 출력
        plus(3,4,function(r1){
            console.log('3+4='+r1);//7
        });

        // a+b 를 더한 값에 4를 곱해 출력
        plus(3,4,function(r1){
            multi(r1,4,function(r2){
                console.log('(3+4)*4='+r2);
            });
        });

        // a 와 b 를 더한 값에 4를 곱한 후 2로 나눠 출력
        plus(3,4,function(r1){
            multi(r1,4,function(r2){
                divide(r2,2,function(r3){
                    console.log('(3+4)*4/2='+r3);
                })
            });
        });

        // a 와 b 를 더한 값에 4를 곱한 후 2 나누고 30을 더해 출력
        plus(3,4,function(r1){
            multi(r1,4,function(r2){
                divide(r2,2,function(r3){
                    plus(r3,30,function(r4){
                        console.log('(3+4)*4/2+30='+r4);
                    });
                });
            });
        });
        /* 이렇게 하면 깔끔 할텐데... 이걸 위해 Promise 와 async-await 이 필요
        r1 = plus(3,4);
        r2 = multi(r1,4);
        r3 = divide(r2,2);
        r4 = plus(r3,30);
        */
    </script>
</html>

 

 

 

<html>
    <head>
        <meta charset="UTF-8">
        <title>Front End</title>
        <link rel="icon" href="./img/favicon.png">
        <style>

        </style>
    </head>
    <body>

    </body>
    <script>
        // 비동기의 문제점
        function ansyncEx(){
            let result = 0;
            setTimeout(function(){
                result = 10+20; // 10+20 이라는 로직을 완성하기 전에
                console.log('10+20='+result);
            },100);
            // 기다리지 않고 아래 내용을 실행
            return 'result : '+result;
        }
        console.log(ansyncEx());

        // 콜백 사용시 콜백지옥 발생(2단계 이사상 진행시...)
        // 이것을 해결하기 위해 Promise 객체 라는 것이 등장
        function prom(){
            // resolve : 성공시 실행 함수
            // reject : 실패시 실행 함수
            return new Promise(function(resolve,reject){
                let result = 0;
                setTimeout(function(){
                    result = 10+20; 
                    resolve('result : '+result);
                },100);
            });
        }
        console.log('Promise 객체 활용',prom());//Promise 객체가 나온다.

        //Promise 객체에서 무언가를 꺼내기 위해서는 then() 을 사용
        prom().then(function(data){
            console.log('Promise 에서 꺼내온 값',data);
            data += '!!!!';
            return data;
        }).then(function(data){ // 추가 작업을 하고 싶다면 then()
            console.log(data);
        });


    </script>
</html>

 

1. J-Query 는 무엇 인가요?

- J-Query 는 JavaScript 의 Library 이다.

 

2. Library 는?

- 자주 사용하거나, 직접 구현이 어려운 기능을 만들어 모아 놓은 Program Group

- JavaScript Library 로는 J-Query 외에도 RequireJS, Prototye, AngluarJS, Backbone 등이 있다

 

3. J-Query 를 사용 하는 이유는?

1) 사용의 편리성이 있다.

 

var elem = document.getElementById( “demo” );

elem.addListener(“click”, function(){

 alert( “hello, j-Query” );

})



$( “#demo” ).click( function(){

 alert( “hello, j-Query” );

 });

 

2) Cross Browsing

- Java Script 는 Browser 에서 해석하므로 종류나 버전마다 표현이 안되거나 다르게 되는 경우가 있다.

- J-Query 에서는 내부적으로 Browser 마다 처리를 해 놓았기 때문에 신경 쓸 필요가 없다.

 

3) 다양한 Plugin - J-Query 를 기초로 한 유용한 Plugin 이 많다.

- Bootstrap, J-query UI, Pagination 등