※ Generator
- 함수의 실행을 중간에 멈췄다가 재개할 수 있는 기능
- Itarable 이면서 iterator 이다
▶ 기본 구조
function 옆에 * 을 붙이고
yield 키워드 사용 - yield 에서 함수의 실행을 멈출 수 있다
function* fn (){
console.log(1);
yield 1;
console.log(2);
yield 2;
console.log(3);
console.log(4);
yield 3;
return "finish";
}
const a = fn();
fn() 함수를 실행하면 generator 객체가 반환됨
▷ next()
a.next(); // console : 1
// {value : 1, done : false}
를 실행하면 가장 가까운 yield 문을 만날때까지 실행되고 데이터 객체를 반환함.
반환된 객체는 {value, done} 프로퍼티를 갖는다
value : 만난 yield 의 오른쪽에 있는 값 (값 생략 시 undefined)
done : 함수코드가 끝났는지를 나타냄
a.next(); //console : 2
//{value: 2, done: false}
a.next(); // console : 3 4
//{value: 3, done: false}
a.next();
//{value: finish, done: true}
a.next();
//{value : undefined, done: true}
▷ return()
- return 메서드를 호출하면 그 즉시 done 속성값이 true 가 됨
a.return('End');
//{value : "End", done: true}
a.next();
//{value : undefined, done : true}
return 사용 후 next 를 사용하면 value 는 얻어올 수 없고 done 은 true 이다
▷ throw()
- throw 도 마찬가지로 done 을 true 로 바꿔준다.
function* fn (){
try{
console.log(1);
yield 1;
console.log(2);
yield 2;
console.log(3);
console.log(4);
yield 3;
return "finish";
} catch(e){
console.log(e);
}
}
const a = fn();
a.throw(new Error('err')) // console : error 로그
//{value : undefined, done: true}
a.next();
//{value:undefined,done:true}'Javascript' 카테고리의 다른 글
| [JS] 모던 자바스크립트 Deep Dive 북스터디 Week1 (0) | 2023.08.04 |
|---|---|
| [Javascript] Optional chaining (?.) (0) | 2023.02.20 |
| [Javascript] async / await (0) | 2022.12.03 |
| [Javascript] 프로미스 (Promise) (0) | 2022.12.03 |
| [Javascript] setTimeout / setInterval /call & apply & bind (0) | 2022.12.03 |