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 }