以下是 Generator 函数的基本语法:
function* myGenerator() {
// 通过 yield 暂停执行,并返回一个值给调用方
yield 1;
yield 2;
yield 3;
return "Finished";
}
// 创建 Generator 对象
const generator = myGenerator();
// 通过调用 next() 方法执行 Generator 函数
console.log(generator.next()); // 输出: { value: 1, done: false }
console.log(generator.next()); // 输出: { value: 2, done: false }
console.log(generator.next()); // 输出: { value: 3, done: false }
console.log(generator.next()); // 输出: { value: "Finished", done: true }
console.log(generator.next()); // 输出: { value: undefined, done: true }
在上述示例中,myGenerator 是一个 Generator 函数,使用 yield 关键字来定义生成器的每一步。每次调用 generator.next() 方法都会执行 Generator 函数的下一步,并返回一个包含当前步骤结果的对象。
Generator 函数的执行是惰性的,只有在调用 next() 方法时才会执行到下一个 yield 或函数结束。当 Generator 函数执行到最后,done 属性为 true,并且再次调用 next() 不会再有新的值产生。
Generator 函数还可以通过 yield* 来委托给另一个 Generator 函数,实现更复杂的控制流程。
function* anotherGenerator() {
yield 4;
yield 5;
yield 6;
}
function* combinedGenerator() {
yield 1;
yield 2;
yield 3;
yield* anotherGenerator(); // 委托给另一个 Generator 函数
yield 7;
}
const combined = combinedGenerator();
console.log(combined.next()); // 输出: { value: 1, done: false }
// ...
console.log(combined.next()); // 输出: { value: 7, done: false }
console.log(combined.next()); // 输出: { value: undefined, done: true }
Generator 函数的引入使得异步编程更加方便,例如通过使用 yield 暂停异步操作,配合 async/await 使用,可以更清晰地表达异步流程。
转载请注明出处:http://www.zyzy.cn/article/detail/4678/ES6