Generator 자세히 살펴보기

2382 단어

Generator는 어떤 역할을 할까요???

  • ES6에서 제안한 비동기식 문제 해결 방안

    먼저 코드를 보고generator 함수와 일반 함수의 차이를 느껴보세요

  •    function* test(){
            yield 2;
            yield 3;
            yield 5;
        }
        var app = test()            //         
        var a = app.next()          //                 
        console.log(a)              // {value:2,done:false}
        var b = app.next()          //     
        console.log(b)              // {value:3,done:false}
        var b = app.next()          //     
        console.log(b)              // {value:5,done:true}

    위의 코드에서 알 수 있듯이generator는 함수를 쓸 때 운행을 멈추게 할 수 있다. 마치 우리가 끊을 때와 같다. 그러면 나는 내가 비동기 함수를 쓰면 그를 멈추게 할 수 있지 않을까 생각했다. 흥분된 나는 서둘러 시험해 보았다.

    function* getTime(){
        //     axios    ,     promise ,           promise  
        yield axios.get('xxxxx')
    }
    var app = getTime()
    app.next()     //  {value,done}      value     axios  
  • 요약하자면, generator는 비동기적인 해결 방법
  • 이다.
  • 그의 용도를 알았으니 어떻게 사용하는지 배워보자
  • Promise 사용

  • Promise의 쓰기 규범은 무엇입니까
  • //             *  
    function* add(){}
    function *add(){}
    //    es6        
    get(){
        ...
    }
    //          
    *get(){
        
    }
  • Promise 사용 방법

    이 때 키워드를 알아야 합니다. 이 키워드는generator 함수에 있어야 합니다. 이것은 await가 async 내부에 사용해야 하는 것과 같습니다.

  • var app = test()  //test   generator  
    app.next()        //      yield       ,   yield              value 
    //  
    function *test(){
        yield 2
    }
    test().next()     //test()      ,   next       ,         {value:2,done:true}
    //     ,yield       value,done  generator       return  yield   ,           
  • 그러면 우리는generator 함수를 쓸 것이고 호출할 것이다
  • 매개 변수를 전달할 수 있다면 우리의 이 함수는 사용하기에 완벽하지 않겠는가
  • function* test(){
        console.log('     ')
        console.log(`1.${yield}`)  //       es6        
        console.log(`2.${yield}`)  //       
    }
    var app = test()                //       app      generator     ,        
    app.next()                     
    app.next('   ')             
    app.next('   ')             
    //           
           
    1.   
    2.   
  • 공유가 쉽지 않습니다. 관심 가져주셔서 감사합니다
  • 좋은 웹페이지 즐겨찾기