ES6 Builder Builder 애플리케이션 -- 비동기식 작업 제어

9458 단어 ES6/ES7

생성기(Generator)

  • 생성기는 무엇입니까? 생성기는 구조 함수Generator를 통해 만들어진 대상입니다. 생성기는 교체기일 뿐만 아니라 교체 가능한 대상이기도 합니다
  • 2. 생성기는 어떻게 만듭니까?생성기 생성, 생성기 함수 사용(Generator Function)
  • 생성기 함수를 어떻게 씁니까?

  • 함수 키워드 뒤에 놓거나 함수 이름 앞에 놓기
    
    	function *metod() {
    	
    	}
    	function* metod() {
    	
    	}
    	{
    		* metod() {
    	
    		}
    	}
    	// , 
    
    
  • 생성기 함수 내부는 어떻게 실행합니까?

  • 생성기 함수 내부는 생성기의 매번 교체에 대한 데이터를 제공하기 위한 것이다
    매번 생성기의next 방법을 호출하면 생성기 함수를 다음 yield 키워드 위치로 실행합니다
    ield는 하나의 키입니다. 이 키는 생성기 함수 내부에서만 사용할 수 있으며, '생성' 의 교체 데이터를 나타냅니다.
  • 주의해야 할 세부 사항은 무엇입니까?

  • 1). 생성기 함수에는 되돌아오는 값이 있고, 되돌아오는 값은 처음done가true일 때의value 속성에 나타납니다.생성기의next 방법을 호출할 때 파라미터를 전달할 수 있으며 전달된 파라미터는yield표현식의 반환값 3)에 전달됩니다.처음 넥스트 방법을 호출했을 때, 전참은 아무런 의미가 없었다.생성기 함수 내부에서 다른 생성기 함수를 호출할 수 있지만 * 번호를 붙이는 것을 주의해야 한다
    
    	  function* t1(){
                yield "a"
                yield "b"
            }
    
            function* test() {
                yield* t1();
                yield 1;
                yield 2;
                yield 3;
            }
    
            const generator = test();
    
    
  • 빌더용 추가 API
  • return 방법: 이 방법을 호출하면 생성기 함수를 앞당겨 끝내고 전체 교체 과정을 앞당겨 끝낼 수 있다
  • throw 방법: 이 방법을 호출하면 생성기에서 오류가 발생할 수 있습니다
  • 
    	 function* task() {
                const d = yield 1;
                console.log(d)
                // //d : 1
                const resp = yield fetch("http://101.132.72.36:5100/api/local")
                const result = yield resp.json();
                console.log(result);
            }
    
            run(task)
    
            function run(generatorFunc) {
                const generator = generatorFunc();
                let result = generator.next(); // ( ),  
                handleResult();
                // result 
                function handleResult() {
                    if (result.done) {
                        return; // , 
                    }
                    // , 
                    //1.  Promise
                    //2.  
                    if (typeof result.value.then === "function") {
                        //1.  Promise
                        // Promise , 
                        result.value.then(data => {
                            result = generator.next(data)
                            handleResult();
                        })
                    } else {
                        //2.  , 
                        result = generator.next(result.value)
                        handleResult();
                    }
                }
            }
    
    

    좋은 웹페이지 즐겨찾기