Koa.js-생성기

JavaScript ES6의 가장 흥미로운 새 기능 중 하나는 생성기라고하는 새로운 유형의 함수입니다. 생성기 이전에는 전체 스크립트가 일반적으로 코드 실행을 중지하고 나중에 동일한 스택으로 다시 시작하는 쉬운 방법없이 위에서 아래로 순서대로 실행하는 데 사용되었습니다. 생성기는 종료하고 나중에 다시 입력 할 수있는 기능입니다. 해당 컨텍스트 (변수 바인딩)는 재진입시 저장됩니다.

생성기를 사용하면 그 사이에 코드 실행을 중지 할 수 있습니다. 따라서 간단한 생성기를 살펴 보겠습니다.

var generator_func = function* (){
   yield 1;
   yield 2;
};

var itr = generator_func();
console.log(itr.next());
console.log(itr.next());
console.log(itr.next());

위의 코드를 실행하면 다음과 같은 결과가 나옵니다.

{ value: 1, done: false }
{ value: 2, done: false }
{ value: undefined, done: true }

위의 코드를 살펴 보겠습니다. 먼저 다음과 같은 생성기를 만듭니다.generator_func(). 우리는이 이상해 보이는 함수의 인스턴스를 생성하고itr. 그런 다음 우리는 전화를 시작했습니다next() 이 itr 변수에.

next ()를 호출하면 생성기가 시작되고 수익률에 도달 할 때까지 실행됩니다. 그런 다음 값과 완료가있는 객체를 반환합니다. 여기서 값에는 표현식 값이 있습니다. 이 표현은 무엇이든 될 수 있습니다. 이 시점에서 실행을 일시 중지합니다. 다시이 함수 (next)를 호출 할 때 생성기는 일시 중지시 함수 상태가 동일한 마지막 항복 지점부터 다음 항복 지점까지 실행을 다시 시작합니다. 이것은 코드에 더 이상 항복점이 없을 때까지 수행됩니다.

Koa의 발전기

이 튜토리얼에서 생성기에 대해 논의하는 이유는 무엇입니까? Hello World 프로그램에서 기억 하시겠지만,function* ()app.use ()에 콜백을 전달하는 표기법입니다. Koa는 미들웨어 생성기 함수의 배열을 포함하는 객체이며 각 요청에 따라 스택과 같은 방식으로 구성되고 실행됩니다. Koa는 또한 제어 흐름의 업스트림에 이어 다운 스트림을 구현합니다.

이를 더 잘 이해하려면 다음 예제를 살펴보십시오.

var koa = require('koa');
var app = koa();
 
app.use(function* (next) {
   //do something before yielding to next generator function 
   
   //in line which will be 1st event in downstream
   console.log("1");
   yield next;
 
   //do something when the execution returns upstream, 
   //this will be last event in upstream
   console.log("2");
});
app.use(function* (next) {
   // This shall be 2nd event downstream
   console.log("3");
   yield next;
 
   // This would be 2nd event upstream
   console.log("4");
});
app.use(function* () { 
   // Here it would be last function downstream
   console.log("5");
   
   // Set response body
   this.body = "Hello Generators";

   // First event of upstream (from the last to first)
   console.log("6");
});

app.listen(3000);

위의 코드를 실행하고 탐색 할 때 https://localhost:3000/ 콘솔에 다음 출력이 표시됩니다.

1
3
5
6
4
2

이것은 본질적으로 Koa가 생성기를 사용하는 방법입니다. 이 속성을 사용하여 컴팩트 한 미들웨어를 만들고 업스트림 및 다운 스트림 기능 모두에 대한 코드를 작성할 수 있으므로 콜백으로부터 절약 할 수 있습니다.