TypeError: already executing generator
当 generator 在执行其自身的 generator 函数体时,却通过其某个方法(例如 next()
)继续执行时,就会发生 JavaScript 异常“TypeError: generator 正在执行中”。
消息
TypeError: Generator is already running (V8-based) TypeError: already executing generator (Firefox) TypeError: Generator is executing (Safari)
错误类型
TypeError
哪里出错了?
generator 的方法,next()
、return()
和 throw()
,旨在当 generator 函数在 yield
表达式之后或在第一个语句之前暂停时,继续执行该函数。如果在执行 generator 函数时调用其中一个方法,就会抛出此错误。如果你想在 generator 函数中返回或抛出,请分别使用 return
语句或 throw
语句。
示例
js
let it;
function* getNumbers(times) {
if (times <= 0) {
it.throw(new Error("times must be greater than 0"));
}
for (let i = 0; i < times; i++) {
yield i;
}
}
it = getNumbers(3);
it.next();
js
let it;
function* getNumbers(times) {
if (times <= 0) {
throw new Error("times must be greater than 0");
}
for (let i = 0; i < times; i++) {
yield i;
}
}
it = getNumbers(3);
it.next(); // { value: 0, done: false }