Я узнаю о Generator.prototype.throw()
, и я тестирую приведенный ниже код.Как работает Generator.prototype.throw()? Включен ли подразумеваемый следующий()?
var generator = function*() {
for(let i = 0; i < 10; i++) {
try {
var value = yield i;
console.log(i);
} catch(e) {
console.log("catch exception...");
}
}
};
var g = generator();
g.throw();
В этом случае ошибка будет выброшено говоря «Uncaught неопределенными ...» под chrome v49
.
Однако, если мы сначала вызываем g.next()
, тогда вызываем g.throw()
, он работает.
var generator = function*() {
for(let i = 0; i < 10; i++) {
try {
var value = yield i;
console.log(i);
} catch(e) {
console.log("catch exception...");
}
}
};
var g = generator();
g.next(); // Object {value: 0, done: false}
g.throw(); // catch exception...
g.next();
// 1
// Object {value: 2, done: false}
В то же время, значение i
был пропущен, как если бы g.next()
также был выполнен.
Как это происходит?
Спасибо за разъяснения. Я думал, что 'throw()' также войдет в тело функции Generator. Наверное, я ошибся ... – wanderyt