Generator.prototype.throw()

Baseline 已廣泛支援

此特性已非常成熟,可在多種裝置和瀏覽器版本上使用。自 ⁨2016 年 9 月⁩以來,它已在各大瀏覽器中可用。

throw() 方法用於 Generator 例項,它會在生成器的當前暫停位置插入一個 throw 語句,告知生成器發生錯誤,並允許其處理錯誤、執行清理或關閉自身。

語法

js
generatorInstance.throw(exception)

引數

exception

要丟擲的異常。為了便於除錯,最好將其設為 Errorinstanceof

返回值

如果丟擲的異常被 try...catch 捕獲,並且生成器恢復執行以產生更多值,它將返回一個具有兩個屬性的 Object

done

一個布林值。

  • 如果生成器函式的控制流已到達末尾,則為 true
  • 如果生成器函式能夠產生更多值,則為 false
value

下一個 yield 表示式產生的值。

異常

TypeError

如果生成器已在執行,則丟擲錯誤。

如果 exception 未在生成器函式內的 try...catch 塊中捕獲,它也將被拋給 throw() 的呼叫者。

描述

呼叫 throw() 方法時,可以將其視為在生成器的當前暫停位置插入了一個 throw exception; 語句,其中 exception 是傳遞給 throw() 方法的異常。因此,在典型流程中,呼叫 throw(exception) 將導致生成器丟擲異常。但是,如果 yield 表示式被包含在 try...catch 塊中,則錯誤可能會被捕獲,並且控制流可以在錯誤處理後恢復,或者優雅地退出。

示例

使用 throw()

以下示例展示了一個生成器以及使用 throw 方法丟擲的錯誤。錯誤可以像往常一樣被 try...catch 塊捕獲。

js
function* gen() {
  while (true) {
    try {
      yield 42;
    } catch (e) {
      console.log("Error caught!");
    }
  }
}

const g = gen();
g.next();
// { value: 42, done: false }
g.throw(new Error("Something went wrong"));
// "Error caught!"
// { value: 42, done: false }

規範

規範
ECMAScript® 2026 語言規範
# sec-generator.prototype.throw

瀏覽器相容性

另見