これは私のコードスニペットです。
var g = function*() {
try {
yield;
} catch (e) {
console.log("inner catch", e);
}
};
var i = g();
i.next();
try {
i.throw("a");
i.throw("b");
} catch (e) {
console.log("outer catch", e);
}
私はこの結果を期待しています:
inner catch a
inner catch a
では、なぜの内側のキャッチがgenerator
2回キャッチできないのですか?
これは、ジェネレーターcatch
が最初のジェネレーターの後に移動したthrow()
ためtry
、2番目のジェネレーターをキャッチすることができず、例外がその呼び出し位置から伝播するためです。
var g = function*() {
try {
yield;
} catch (e) {
console.log("inner catch", e);
try {
yield;
} catch (e) {
console.log("inner catch 2", e);
}
}
};
var i = g();
i.next();
try {
i.throw("a");
i.throw("b");
} catch (e) {
console.log("outer catch", e);
}
try/catch
ステートメントをネストする必要がないようにするには、ループが必要です。
var g = function*() {
while (true) {
try {
yield;
} catch (e) {
console.log("inner catch", e);
if (e === "b") {
console.log("breaking loop");
break;
}
}
}
};
var i = g();
i.next();
try {
i.throw("a");
i.throw("b");
i.throw("c");
} catch (e) {
console.log("outer catch", e);
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加