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
generatorInstance.throw(exception)
Tham số
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:
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.
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> |