자바스크립트 문법/중고급(비동기_프라미스_this)

제너레이터

자무카 2022. 10. 31.

요약

  • 제너레이터는 제너레이터 함수 function* f(…) {…}을 사용해 만듭니다.
  • yield 연산자는 제너레이터 안에 있어야 합니다.
  • next/yield 호출을 사용하면 외부 코드와 제너레이터 간에 결과를 교환할 수 있습니다.

모던 자바스크립트에서는 제너레이터를 잘 사용하지 않습니다. 그러나 제너레이터를 사용하면 실행 중에도 제너레이터 호출 코드와 데이터를 교환할 수 있기 때문에 유용한 경우가 종종 있습니다. 그리고 제너레이터를 사용하면 이터러블 객체를 쉽게 만들 수 있다는 장점도 있습니다.

다음 챕터에선 for await ... of 루프 안 비동기 데이터 스트림을 다룰 때 사용되는 비동기 제너레이터(asnyc generator)에 대해 알아볼 예정입니다. 비동기 제너레이터는 페이지네이션을 사용해 전송되는 비동기 데이터 스트림을 다룰 때 사용됩니다.

웹 프로그래밍에선 데이터 스트림을 다뤄야 하는 경우가 많은데, 제너레이터는 이 경우에 유용합니다.

// 제너레이터 : 이터러블 -> for..of 가능
// 코드 실행 X->실행을 처리하는 객체를 반환

function* generateSequence() {
  yield 1; // // value:1, done:false
  yield 2;
  return 3; // value:3, done:true
}

let generator = generateSequence();


alert(JSON.stringify(generator.next())) // value:1, done:false
alert(JSON.stringify(generator.next())) // value:2, done:false
alert(JSON.stringify(generator.next())) // value:3, done:true

// for( of )
// for(let value of generator) { // 제너레이터 : 이터러블 -> for..of 가능
//   alert(value);
// }
// 1, 2가 출력됨(return시, done: true->value 무시. return->yield)

 

이터러블 대신 제너레이터 사용하기

제너레이터 컴포지션

'yield’를 사용해 제너레이터 안·밖으로 정보 교환하기

generator.throw

https://ko.javascript.info/generators

댓글