- ジェネレーターの基本構文: ジェネレーターは、関数と似たような構文を持ちますが、functionキーワードの後にアスタリスク(*)を付けます。以下は、ジェネレーターの基本的な構文です。
function* myGenerator() {
// ジェネレーターの本体
}
- yieldキーワードの使用: ジェネレーターの中で、yieldキーワードを使って値を返すことができます。yield文が実行されると、ジェネレーターは一時停止し、その値が呼び出し元に返されます。以下は、yieldキーワードの使用例です。
function* myGenerator() {
yield 1;
yield 2;
yield 3;
}
const generator = myGenerator();
console.log(generator.next().value); // 1
console.log(generator.next().value); // 2
console.log(generator.next().value); // 3
- ジェネレーターを利用した非同期処理の制御: ジェネレーターは非常に便利な非同期処理の制御フローを作るために使用できます。以下は、非同期処理を制御するためにジェネレーターを使用する例です。
function* fetchData() {
try {
const data = yield fetch('https://api.example.com/data');
console.log(data);
} catch(error) {
console.error(error);
}
}
function runGenerator(generator) {
const iterator = generator();
function iterate(iteration) {
if (iteration.done) {
return iteration.value;
}
return Promise.resolve(iteration.value)
.then(x => iterate(iterator.next(x)))
.catch(x => iterate(iterator.throw(x)));
}
return iterate(iterator.next());
}
runGenerator(fetchData);
上記の例では、fetchDataジェネレーター内で非同期なリクエストを行い、その結果を制御フローに組み込んでいます。
ジェネレーターは、さまざまな場面で使用されるため、非常に強力なツールです。この記事では、ジェネレーターの基本的な使い方と、非同期処理への応用例を紹介しました。これにより、あなたのコードの品質と保守性を向上させることができます。