요약
- 제너레이터는 제너레이터 함수 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
'자바스크립트 문법 > 중고급(비동기_프라미스_this)' 카테고리의 다른 글
비동기 promise, async/await (생활코딩) (0) | 2022.10.28 |
---|---|
this, 콜백 ::: 코어 자바 스크립트 (0) | 2022.10.20 |
24장 클로저 (0) | 2022.09.30 |
22장 this (0) | 2022.09.30 |
댓글