Generator.prototype.next()

next() 메서드는 donevalue 속성을 가지는 객체를 반환 합니다. next 메서드에 매개변수를 제공하여 값을 제너레이터로 보낼 수도 있습니다.

구문

js
generatorObject.next(value);

매개변수

value

제너레이터로 보낼 값입니다.

값은 yield 식의 결과로 할당됩니다. 예를 들어 variable = yield 식에서 .next() 함수에 전달된 값은 variable에 할당됩니다.

반환 값

두 개의 속성을 가진 객체이고, 이 속성은 다음과 같습니다.

done (boolean)

반복자가 반복 시퀀스의 끝을 지난 경우 true입니다. 이 경우 value는 선택적으로 반복자의 반환 값을 지정합니다.

반복자가 시퀀스에서 다음 값을 생성할 수 있는 경우 false입니다. 이는 done 속성을 완전히 지정하지 않는 것과 같습니다.

value

제너레이터가 생성하거나 반환한 모든 JavaScript 값입니다.

예제

next() 사용하기

다음 예제에서는 간단한 제너레이터와 next 메서드가 반환하는 객체를 보여 줍니다.

js
function* gen() {
  yield 1;
  yield 2;
  yield 3;
}

const g = gen(); // "Generator { }"
g.next(); // "Object { value: 1, done: false }"
g.next(); // "Object { value: 2, done: false }"
g.next(); // "Object { value: 3, done: false }"
g.next(); // "Object { value: undefined, done: true }"

리스트와 함께 next() 사용하기

이 예제에서 getPage는 리스트를 받아 pageSize 크기의 청크로 "페이지 나누기"를 수행합니다. next를 호출할 때마다 그러한 청크가 하나 생성됩니다.

js
function* getPage(pageSize = 1, list) {
  let output = [];
  let index = 0;

  while (index < list.length) {
    output = [];
    for (let i = index; i < index + pageSize; i++) {
      if (list[i]) {
        output.push(list[i]);
      }
    }

    yield output;
    index += pageSize;
  }
}

list = [1, 2, 3, 4, 5, 6, 7, 8];
let page = getPage(3, list); // Generator { }

page.next(); // Object {value: (3) [1, 2, 3], done: false}
page.next(); // Object {value: (3) [4, 5, 6], done: false}
page.next(); // Object {value: (2) [7, 8], done: false}
page.next(); // Object {value: undefined, done: true}

제너레이터에 값 보내기

이 예제에서는 값과 함께 next를 호출합니다.

참고: 제너레이터가 처음에는 아무것도 생성하지 않았기 때문에 첫 번째 호출에서 기록되는 것은 없습니다.

js
function* gen() {
  while (true) {
    let value = yield null;
    console.log(value);
  }
}

const g = gen();
g.next(1);
// "{ value: null, done: false }"
g.next(2);
// 2
// "{ value: null, done: false }"

명세서

Specification
ECMAScript Language Specification
# sec-generator.prototype.next

브라우저 호환성

BCD tables only load in the browser

같이 보기