ES6 中引入的 Generator(生成器)是一个非常强大且灵活的 JavaScript 特性,它提供了一种在函数执行期间暂停和恢复执行的机制,允许你迭代大型数据集、处理异步代码、控制流程等
生成器函数的定义:
- 生成器是一种特殊类型的函数,它使用 function 关键字来定义。
- 生成器函数内部可以包含
yield
语句,用于在函数执行期间产生值,并将函数的状态保存,以便在以后的调用中恢复执行。
使用 yield
暂停执行:
- 当生成器函数执行到
yield
语句时,它会暂停执行,并将yield
后面的值返回给调用者。 - 函数的状态被保留,可以在以后的调用中恢复执行。
可迭代性:
生成器对象是可迭代的,因此你可以使用 for...of
循环、...
扩展运算符等方式来遍历生成器产生的值。
控制异步流程:
- 生成器在处理异步代码时非常有用。它们可以使异步代码看起来更像同步代码,以增加可读性。
- 通过使用异步操作的
yield
,可以在异步操作完成后获取结果。
function* fetchData() {
const data = yield fetch('https://example.com/data');
console.log(data);
}
const generator = fetchData();
const promise = generator.next().value;
promise.then(response => {
return response.json();
}).then(data => {
generator.next(data);
});
生成器的无限迭代:
- 生成器可以无限地生成值,因为它们可以在需要时无限暂停和恢复执行。
- 这在处理大型数据集或生成无限序列时非常有用。