본문 바로가기

JavaScript

generator function

Generator

개념

- generator function으로부터 반환된 값이며 반복자와 반복자 프로토콜을 준수한다.

function* gen() { 
  yield 1;
  yield 2;
  yield 3;
}

var g = gen(); // "Generator { }"

메서드 

- Generator.prototype.next(); // yield 표현을 통해 yield된 값을 반환한다.

- Generator.prototype.return(); // 주어진 값을 반환하고 생성기를 종료한다.

- Generator.prototype.throw(); // 생성기로 에러를 throw 한다.

 

yield

개념

- 제너레이터 함수를 중지하거나 재개하는데 사용된다.

- return처럼 함수를 종료한다. 다만 함수를 재호출(next())할 경우 해당 지점에서 시작한다.

- value와 done 속성을 가진다.

- value : yield 표현의 실행 결과.

- done : 제너레이터 함수가 완전히 종료되었는지 여부를 boolean형태로 보여준다. 

- yield* : 반복자가 반복자를 호출하는 경우 쓰인다.

function* call() {
    console.log('first call');
    yield 10;
    console.log('second call');
    yield 20;
    console.log('third call');
    yield 30;
}

// value와 done 둘다 나옴
let gen = call();
console.log(gen.next());
console.log(gen.next());
console.log(gen.next());
console.log(gen.next());

// value만 나옴
for(let atom of call()){
    console.log(atom);
}

Generator Function ( function*)

개념

- Generator 객체를 반환한다.

- 생성자로서 사용될 수 없다.

- 인자값을 넘길 수도 있다. : 비동기 콜에서 함수끼리 통신하게 만들 수 있다.

function* anotherGenerator(i) {
  yield i + 1;
  yield i + 2;
  yield i + 3;
}

function* generator(i){
  yield i;
  yield* anotherGenerator(i);
  yield i + 10;
}

var gen = generator(10);

console.log(gen.next().value); // 10
console.log(gen.next().value); // 11
console.log(gen.next().value); // 12
console.log(gen.next().value); // 13
console.log(gen.next().value); // 20

 

'JavaScript' 카테고리의 다른 글

객체탐색과 배열탐색  (0) 2019.07.22
변수 선언  (0) 2019.07.22
jest  (0) 2019.07.22
Promise  (0) 2019.07.22
데이터  (0) 2019.07.17