Tại sao 1 try có thể dùng nhiều catch
Cho dù bạn giỏi lập trình đến đâu thì đôi khi các đoạn code của bạn vẫn có lỗi. Chúng có thể là do lỗi lập trình, do người dùng nhập dữ liệu không mong muốn, phản hồi sai từ máy chủ và rất nhiều lý do khác...
Show Thông thường, khi chương trình bị crash (dừng lại) do lỗi thì lỗi sẽ được in ra console ngay lập tức. Tuy nhiên, JavaScript có một cấu trúc cú pháp là
Cú pháp "try...catch"Cú pháp
Cách hoạt động của try-catch như sau:
Vì vậy, lỗi xảy ra bên trong Sau đây là một số ví dụ:
Chú ý: ► Cú pháp Ví dụ đoạn code sai cú pháp sau:
Đầu tiên, JavaScript engine đọc mã, và sau đó thực thi. Các lỗi xảy ra trong giai đoạn đọc mã được gọi là lỗi compile và không thể khôi phục được. Bởi vì JavaScript Engine không thể hiểu được đoạn mã đó. Vì vậy, ► Cú pháp try-catch hoạt động đồng bộ. Đó là bởi vì bản thân hàm được thực thi ngay sau đó, khi quá trình thực thi đã rời khỏi khối Để bắt một ngoại lệ bên trong một hàm với setTimeout, khối
Đối tượng ErrorKhi có lỗi xảy ra, JavaScript tạo ra một đối tượng chứa thông tin chi tiết về lỗi. Đối tượng này được truyền dưới dạng tham số đến
Đối với tất cả các lỗi có sẵn (built-in error), đối tượng Error có hai thuộc tính chính là:
Ngoài ra, còn các thuộc tính khác cũng có sẵn trong hầu hết các môi trường. Một trong những thuộc tính được sử dụng và hỗ trợ rộng rãi nhất là: Thuộc tính Ví dụ:
Cách sử dụng khác của catchNếu bạn không cần thông tin chi tiết về lỗi,
Sử dụng "try...catch"Sau đây, mình hãy cùng khám phá một trường hợp thực tế sử dụng
Như bạn đã biết, JavaScript hỗ trợ JSON.parse(str) để đọc các giá trị được mã hóa dạng JSON. Thông thường, JSON được sử dụng để giải mã dữ liệu nhận được qua mạng, từ server hoặc một nguồn khác. Bạn có thể nhận được JSON string và gọi
Bây giờ, nếu Dĩ nhiên là bạn không muốn điều này xảy ra phải không? Với cách xử lý trên, nếu có lỗi với dữ liệu, người dùng sẽ không bao giờ biết được điều đó - trừ khi mở DevTool. Và mọi người thực sự không thoải mái khi một cái gì đó "chỉ chết" - "không hoạt động" mà không có bất kỳ thông báo lỗi nào. Để giải quyết vấn đề này, bạn hãy sử dụng
Ở đây, mình chỉ sử dụng
"Throw" lỗi tự định nghĩaĐiều gì xảy ra nếu Ví dụ
Trong đoạn code trên, Toán tử "throw"Mỗi toán tử Cú pháp là: Về cơ bản, bạn có thể dùng bất cứ thứ gì làm đối tượng lỗi. Đó có thể là một dữ liệu nguyên thủy, như một số hoặc một chuỗi. Nhưng tốt hơn là sử dụng các object, tốt nhất là đối tượng có thuộc tính Ngoài ra, JavaScript có sẵn nhiều hàm khởi tạo lỗi như:
Đối với những lỗi có sẵn, thuộc tính
Hãy xem loại lỗi nào
Như bạn có thể thấy, đó là một Quay lại ví dụ lúc trước, việc thiếu thuộc tính Vì vậy, bạn hãy
Tại dòng Bây giờ, Kĩ thuật "rethrowing"Trong ví dụ trên, mình sử dụng Giống như một lỗi lập trình (biến không được xác định) hoặc một lỗi nào khác, không chỉ là lỗi dữ liệu không chính xác như trên. Ví dụ:
Tất nhiên, mọi thứ đều có thể xảy ra! Và bạn hoàn toàn có thể mắc sai lầm. Trong trường hợp trên, Ở đây, mình gặp lỗi không mong muốn nhưng vẫn hiển thị như cũ với nội dung Để tránh những vấn đề như trên, bạn có thể sử dụng kỹ thuật rethrowing với quy tắc đơn giản là: Kỹ thuật rethrowing có thể được giải thích chi tiết hơn như sau:
Thông thường, bạn có thể kiểm tra loại lỗi bằng cách sử dụng toán tử
Mình cũng có thể lấy tên class lỗi từ thuộc tính Trong đoạn code dưới đây, mình sử dụng kĩ
thuật rethrowing để
Câu lệnh Tóm lại, khối Ví dụ dưới đây minh họa cách các lỗi như vậy có thể được phát hiện bởi
một cấp
Ở đây, hàm Cấu trúc "try...catch...finally"Cấu trúc Nếu
Cú pháp mở rộng có dạng như sau:
Ví dụ đoạn code sau:
Đoạn code trên có hai cách thực thi như sau:
Mệnh đề Ví dụ, mình muốn đo thời gian mà hàm Fibonacci Đặc biệt, việc thực hiện Khi đó, mệnh đề Ở đây,
Bạn có thể kiểm tra lại bằng cách chạy chương trình với việc nhập Và sau đó bạn thử nhập Nói cách khác, hàm có thể kết thúc với Chú ý:
Xử lý "catch" toàn cụcGiả sử, bạn gặp một lỗi nghiêm trọng bên ngoài Và bạn có thể muốn ghi lại lỗi, hiển thị một điều gì đó cho người dùng (thông thường họ không thấy thông báo lỗi), v.v. Không có một cách thức chung nào, nhưng các môi trường khác nhau (trình duyệt, Node.js,...) thường cung cấp công cụ cho việc đó, bởi vì điều này thực sự hữu ích. Ví dụ, Node.js có Cú pháp của
Trong đó:
Ví dụ:
Vai trò của Tổng kếtCấu trúc Cú pháp đầy đủ của
Cấu trúc trên có thể không có Các đối tượng lỗi bao gồm các thuộc tính sau:
Nếu một đối tượng lỗi không cần thiết, bạn có thể bỏ qua nó bằng cách sử dụng Ngoài ra, bạn cũng có thể tạo ra lỗi của riêng mình bằng cách sử dụng toán tử Rethrowing là một cách xử lý lỗi rất quan trọng: khối Ngay cả khi bạn không có Tham khảo: Error handling, "try...catch" ★ Nếu bạn thấy bài viết này hay thì hãy theo dõi mình trên Facebook để nhận được thông báo khi có bài viết mới nhất nhé: |