generator

장동혁·2020년 11월 2일
0

ECMA Script

목록 보기
2/4

generator?

iterator/iterable을 간편하게 만들 수 있는 generator는 generator funtion으로 부터 리턴된 객체로 iterator프로토콜을 준수한다. (준수하기 때문에 generator는 iterator임)

iterator라면 가지고 있어야할 next메서드 이외에도 주어진 값을 반환하고 종료하는 return메서드, error를 전달하는 throw메서드를 가지고 있다. (iterator는 generator가 아님)

또한 Symbol.iterator 메서드를 가지고 있기때문에 iterable이기도 하다. (iterator이면서 동시에 iterable!)

generator function 호출 => generator

//generator function
function* generatorFn(i) {
  yield i + 1;
  yield "a";
  yield false;
}

const generator = generatorFn(10);

console.debug(generator.next().value);
console.debug(generator.next().value);
generator.return();
console.debug(generator.next().value);

const generator2 = generatorFn(20);
console.debug([...generator2]);


result
1
"a"
"undefined"
[21, "a", false]

next 메서드

generator function 호출시 파라미터를 전달이 가능해서 사용했다는 것은 위 예제에서도 볼수있다. 그런데 next메서드를 호출시에도 파라미터 전달이 가능하다.

function* generatorFn(param) {
  console.log("start!");
  let result;
  result = yield param;
  return result;
}

const generator = generatorFn(0);

console.log(generator.next());
console.log(generator.next(1));

yeild 키워드 next함수의 키워드로 치환된다. 단 치환되는 yeild키워드는 값의 반환({next: --- , value: ---})을 마친 yeild이다 따라서 첫 번째 next메서드 호출 시 파라미터를 전달해도 반환을 마친 yeild키워드가 없으므로 의미가 없다.

profile
기록하는 습관

0개의 댓글