Generator.prototype.throw()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2016.

Phương thức throw() của các thực thể Generator hoạt động như thể câu lệnh throw được chèn vào thân generator tại vị trí bị tạm dừng hiện tại, thông báo cho generator về một điều kiện lỗi và cho phép nó xử lý lỗi hoặc thực hiện dọn dẹp và đóng lại.

Cú pháp

js
generatorInstance.throw(exception)

Tham số

exception

Ngoại lệ cần ném ra. Để mục đích gỡ lỗi, nó hữu ích khi là instanceof Error.

Giá trị trả về

Nếu ngoại lệ được ném ra bị bắt bởi try...catch và generator tiếp tục để yield thêm giá trị, nó sẽ trả về một Object với hai thuộc tính:

done

Giá trị boolean:

  • true nếu luồng điều khiển của hàm generator đã đến cuối.
  • false nếu hàm generator có thể tạo thêm giá trị.
value

Giá trị được yield từ biểu thức yield tiếp theo.

Ngoại lệ

TypeError

Được ném ra nếu generator đang chạy.

Nếu exception không bị bắt bởi try...catch trong hàm generator, nó cũng được ném ra cho người gọi của throw().

Mô tả

Phương thức throw(), khi được gọi, có thể được coi như thể câu lệnh throw exception; được chèn vào thân generator tại vị trí bị tạm dừng hiện tại, trong đó exception là ngoại lệ được truyền cho phương thức throw(). Do đó, trong luồng thông thường, gọi throw(exception) sẽ khiến generator ném ra ngoại lệ. Tuy nhiên, nếu biểu thức yield được bọc trong khối try...catch, lỗi có thể bị bắt và luồng điều khiển có thể tiếp tục sau khi xử lý lỗi, hoặc thoát ra một cách ưu thế.

Ví dụ

Sử dụng throw()

Ví dụ sau cho thấy một generator và một lỗi được ném ra bằng phương thức throw. Lỗi có thể bị bắt bởi khối try...catch như thông thường.

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 }

Đặc điểm kỹ thuật

Specification
ECMAScript® 2027 Language Specification
# sec-generator.prototype.throw

Tương thích trình duyệt

Xem thêm