yield
是 JavaScript 中的一个关键字,用于定义生成器函数。生成器函数是一种特殊类型的迭代器,可以在执行过程中暂停和恢复。
当一个函数被声明为生成器函数时,它可以在执行过程中通过 yield
关键字返回一个值,并暂停执行。下一次调用生成器的 next()
方法时,函数将从上次暂停的地方继续执行,直到遇到下一个 yield
表达式。
生成器函数可以通过函数声明或函数表达式来创建,并且可以使用星号(*)来标记。
function* generatorFunction() {
yield 1;
yield 2;
yield 3;
}
const generator = generatorFunction();
async/await
语法,生成器可以用于控制异步操作的流程。function* simpleGenerator() {
yield 'Hello';
yield 'World';
}
const gen = simpleGenerator();
console.log(gen.next()); // { value: 'Hello', done: false }
console.log(gen.next()); // { value: 'World', done: false }
console.log(gen.next()); // { value: undefined, done: true }
next()
调用:当生成器函数执行完毕后,再次调用 next()
方法将返回 { value: undefined, done: true }
。这是正常行为,表示生成器已经没有更多的值可以产生。yield
:如果在生成器函数中没有使用 yield
,则该函数将不会按预期工作,因为它会立即执行完毕并返回 undefined
。try...catch
语句来处理异常,也可以通过 throw
方法抛出异常。function* errorHandlingGenerator() {
try {
yield 'Start';
throw new Error('Something went wrong');
yield 'End'; // 这行代码不会被执行
} catch (e) {
console.error(e.message); // 输出: Something went wrong
yield 'Recovered';
}
}
const errorGen = errorHandlingGenerator();
console.log(errorGen.next()); // { value: 'Start', done: false }
console.log(errorGen.next()); // 抛出错误并捕获: Something went wrong
console.log(errorGen.next()); // { value: 'Recovered', done: false }
console.log(errorGen.next()); // { value: undefined, done: true }
在使用 yield
时,需要注意生成器的状态(是否完成)以及如何正确处理异常。
没有搜到相关的文章