Generator

이정후·2022년 10월 5일
0

자바스크립트

목록 보기
14/14

제네레이터는 함수의 실행을 중간에 멈추었다가 재개할 수 있게하는 독특한 기능이다.

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();

제네레이터 함수를 실행하면 제네레이터 객체가 반환된다.

본문 코드는 실행되지 않았다.(console.log), 제네레이터에는 next를 사용할 수 있는데,

가장 가까운 yield문을 만날때까지 실행되며 데이터 객체를 반환한다. 이 데이터 객체는 value와 done 프로퍼티를 가지는데 yield의 오른쪽 값이 value가 되며 done은 함수 코드가 끝났는지를 나타내며 함수가 완전히 실행되면 true, 아니면 false를 반환한다.

이후 동일하게 진행해보면 value의 값은 2, 3이 찍히며 아직 함수가 끝나지 않아 done값은 false이다.
그러나 yield 3; 이후에는 return문에 의해 value값이 "Finish"로 변하였고 done값도 true로 바뀌었다.
마지막 next(); 값은 더 이상 value값이 존재하지 않기에 undefined를, 함수는 끝났기에 done을 출력한다.

Generator 메소드

next(), return(), throw()

next이외에도 return과 throw 메소드가 있는데 next로 진행하다가 return메소드를 사용하면 그 즉시 제네레이터 함수는 종류가 되고 return('anything') 괄호 안의 값이 value값이 된다.

throw는 try, catch문으로 사용할 수 있다.

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);
    }
}


catch문에 있는 에러로그를 출력한다.

return과 throw는 모두 done값을 true로 만드는 특징이 있다.

profile
꾸준하게

0개의 댓글