✍️ yield를 통해 함수를 멈출 수 있기 때문에 비동기 통신 할 때 유용하게 사용한다. (필자는 redux- saga를 통해 generator를 접하였다.) 기본적인 사용 방법에 대해 정리 해 보았다.
function *generator(){
yield 1;
yield 2;
yield 3;
}
let iterator = generator();
console.log(iter[Symbol.iterator]() == iter) // true
➡️ iterable을 간단하게 표현할 수 있음.next() method에 인수를 넣어주면 yield로 값이 넘어감 .
function* generator(){
const index = 1;
const i = yield index;
yield i;
}
let iterator = generator();
iterator.next(); // {value: 1, done: false}
iterator.next(10); // {value: 10, done: false}
{ value: n , done: false }
형태 (완료 시, {done: true}
)function* generator() {
const index = 0;
yield index;
yield* [1,2,3,4];
}
let iterator = generator();
function* generator1(start, end) {
for (let i = start; i <= end; i++) yield i;
}
function* generator2() {
yield* generator1(1, 5);
yield* generator1(20, 4);
yield* generator1(97, 112);
}
let str = '';
for(let code of generator2()) {
str += code;
}
console.log(str); // 12345979899100101102103104105106107108109110111112
return 사용
function *generator(){
yield 1;
yield 2;
yield 3;
return 10;
}
{ value: return 값 , done: true}
가 되며 끝남.에러 발생
throw()
function* generator(){
try{
let i = yield 7;
console.log("next!");
}catch(error){
console.log(error);
}
}
let iterator = generator();
iterator.next();
iterator.throw( new Error("error!!")); // next! 로 넘어가지 않음. try-catch에서 잡힘.
반복문 끝 까지 다 실행 된 경우