generator

6262 ワード

generator?


iterator/iterableを簡単に作成できるジェネレータはgenerator関数から返されるオブジェクトで、iteratorプロトコルに従います.(ジェネレータは反復器で、要件を満たしているため)
iteratorは、nextメソッドに加えて、所定の値を返すreturnメソッドとerrorを渡すthrowメソッドを有する.(反復器はジェネレータではありません)
また、Symbol.反復器メソッドがあるので、iterableでもあります.(反復器でもありiterableでもあります!)
generator関数の呼び出し=>generator
//generator function
function* generatorFn(i) {
  yield i + 1;
  yield "a";
  yield false;
}

const generator = generatorFn(10);

console.debug(generator.next().value);
console.debug(generator.next().value);
generator.return();
console.debug(generator.next().value);

const generator2 = generatorFn(20);
console.debug([...generator2]);


result
1
"a"
"undefined"
[21, "a", false]

次の方法


generator関数を呼び出すときにパラメータを渡すために使用されるため、上記の例でも見られます.ただしnextメソッドを呼び出すとパラメータを渡すこともできます.
function* generatorFn(param) {
  console.log("start!");
  let result;
  result = yield param;
  return result;
}

const generator = generatorFn(0);

console.log(generator.next());
console.log(generator.next(1));
yeildキーワードnext関数のキーワード.ただし、置換されたyeildキーワードは、値の戻り({next:---value:--})が完了したyeildであるため、最初のnextメソッド呼び出し時に伝達パラメータも返されたyeldキーワードが完了しないため、意味がない.