- vừa được xem lúc

[JavaScript] Bài 16 - Error & Handling

0 0 5

Người đăng: Semi Art

Theo Viblo Asia

Cũng như bất kỳ khía cạnh nào khác trong cuộc sống của chúng ta, code cũng luôn tiềm ẩn những ngoại lệ exception nằm ngoài dự kiến của chúng ta trong quá trình vận hành. Đó là lý do mà tất cả các ngôn ngữ lập trình đều cung cấp cho chúng ta các bộ công cụ để khoanh vùng và xử lý các ngoại lệ này trong logic vận hành của code. Các bộ công cụ để thực hiện tác vụ này thường bao gồm 2 nhóm là -

  • Các cú pháp giúp khoanh vùng phần code có khả năng tạo ra các ngoại lệ về logic vận hành và bắt lại các object mô tả ngoại lệ mà hệ thống tạo ra. Ở đây chúng ta cũng có thể khởi tạo các object mô tả ngoại lệ bằng code để phát động sự kiện này nếu cần thiết.
  • Trình chạy thử code với tính năng debug có thể tạm dừng ở một điểm gần đó, và giúp chúng ta di chuyển từng bước trong tiến trình vận hành code và lần ra được logic tạo ra ngoại lệ. 😄

Và JavaScript tại môi trường trình duyệt web cũng cung cấp cho chúng ta đầy đủ cả 2 nhóm công cụ này. Tuy nhiên thay vì dùng từ ngoại lệ exception như nhiều ngôn ngữ lập trình phổ biến khác, thì JavaScript sử dụng từ error - lỗi vận hành - để mô tả về các logic vận hành nằm ngoài dự tính như vậy. Chúng ta sẽ cố gắng dung hòa điểm bất đồng ngôn ngữ này bằng cách gọi là ngoại lệ trong tiếng Việt yêu dấu và error cho các vị trí cần sử dụng trong code. 😄

Cú pháp try .. catch .. finally

Chúng ta sẽ xem code ví dụ minh họa trước để có chất liệu thực hiện thảo luận về cú pháp này. 😄

error.js

try { // thao tác có khả năng phát sinh ngoại lệ  // về logic hoạt động của code var oneArray = []; oneArray.doSomething();
}
catch (error) { // thao tác xử lý khi có ngoại lệ phát sinh console.error(error.name); console.error(error.message);
}
finally { // thao tác dọn dẹp tài nguyên cần thiết // bất kể có ngoại lệ phát sinh hay không console.log( 'Có lõi lầm gì hay không ' + 'thì cuối cùng dòng này cũng vẫn sẽ được in ra' );
} // kết quả
// 'TypeError'
// 'oneArray.doSomething is not a function'
// 'Có lõi lầm gì hay không thì cuối cùng dòng này cũng vẫn sẽ được in ra'

Rồi... Trông cũng không quá khó hiểu. Chúng ta có 3 khối liên kết với nhau. Một dạng chuyển tiếp tác vụ hoạt động như if ... else.

  • Đầu tiên là khối try { ... } thực hiện công việc chính của chương trình mà chúng ta viết ra. Từ khóa try sẽ giúp chúng ta phát hiện ra các object mô tả ngoại lệ error nếu code bên trong tạo ra khi vận hành. Sau đó try sẽ ném throw các object mô tả ngoại lệ error ra ngoài.
  • Tiếp đến là catch - bắt lại - đỡ lấy các object mô tả ngoại lệ error để chúng ta có thể kiểm tra thông tin mô tả ngoại lệ phát sinh và ra quyết định xử lý để phần mềm đáp ứng tốt nhất tới người dùng.
  • Sau cùng là finally - cuối cùng - thì cho dù có ngoại lệ phát sinh hay không cũng vẫn sẽ chạy phần code hỗ trợ try dọn dẹp tài nguyên đang bày dang dở khi thực hiện công việc. Ví dụ như đóng các tệp lại, hoặc xóa object nào đó, hoặc thiết lập lại các công cụ mà try sử dụng để chuẩn bị cho các lượt chạy code khác.

Các object mô tả ngoại lệ error

Giống với các object mô tả sự kiện event, các object ngoại lệ error thuộc một class cơ sở chung nhất là Error - Tài liệu về class Error của MDN - và có 2 thuộc tính căn bản là -

  • name chứa chuỗi mô tả tên của class cơ sở gần nhất có thể sử dụng để phân cấp các ngoại lệ và ra quyết định xử lý khác nhau. Như trong code ví dụ ở trên thì chúng ta có tên classTypeError mô tả các ngoại lệ về kiểu dữ liệu được sử dụng trong câu lệnh.
  • message chứa chuỗi mô tả tin nhắn thường được in ra console để xem thông tin mô tả về ngoại lệ. Và trong ví dụ trên là thông báo oneArray.doSomething không phải là một hàm - có nghĩa là chúng ta đang dùng oneArray.doSomething sai logic về kiểu dữ liệu của doSomething.

Như vậy chúng ta cũng có thể tự tạo ra các object mô tả ngoại lệ ở khối try và ném ra ngoài cho catch bắt lấy. 😄

throw.js

try { throw new TypeError( 'Có nhầm lẫn gì đó về logic ' + ' sử dụng một giá trị nào đó' );
}
catch (error) { console.error(error.name); console.error(error.message);
}
finally { console.log( 'Có lõi lầm gì hay không ' + 'thì cuối cùng dòng này cũng vẫn sẽ được in ra' );
} // kết quả:
// 'TypeError'
// 'Có nhầm lẫn gì đó về logic sử dụng một giá trị nào đó'
// 'Có lõi lầm gì hay không thì cuối cùng dòng này cũng vẫn sẽ được in ra'

Tuyệt... Như vậy là chúng ta đã có nhóm công cụ đầu tiên để xử lý logic ngoại lệ. Bạn lưu ý là cũng giống với khi sử dụng Event, chúng ta cũng có thể tạo ra các class mở rộng class cơ sở Error để mô tả các kiểu ngoại lệ khác hỗ trợ cho chương trình mà chúng ta đang xây dựng.

Chạy thử code từng bước một để lần ra logic tạo ngoại lệ và sửa chữa lại

Ở đây chúng ta có thể đặt thêm lệnh debugger; vào đoạn code mà chúng ta nghi vấn nhất về khả năng tạo ra ngoại lệ có logic phức tạp để trình duyệt web có thể giúp chúng ta tạm dừng ở vị trí đó và chạy tiếp từng bước.

debug.js

try { debugger; var a = 0; var b = 1; throw new TypeError( 'Có nhầm lẫn gì đó về logic ' + ' sử dụng một giá trị nào đó' );
}
/* --- */

Sau đó chúng ta mở cửa sổ Sources ở bên cạnh Console; Rồi mở tệp learn.jsrefresh trình duyệt web để mở lại trang web. Lúc này tiến trình chạy tệp JavaScript sẽ tạm dừng ở lệnh debugger;, và chúng ta có thể nhấn phím F10 hoặc tổ hợp phím Ctrl + ' để di chuyển tiếp từng câu lệnh và theo dõi tiến trình chạy code để suy luận ra logic tạo ra ngoại lệ. 😄

Như vậy là chúng ta đã thực hiện xong bài viết về chủ đề Error & Handling. Trong bài tiếp theo, chúng ta sẽ nói về một bộ công cụ mới, giúp chúng ta làm việc dễ dàng hơn và thuận tiện hơn với các tác vụ được thực thi không đồng bộ asynchronous. Hẹn gặp lại bạn trong bài viết tiếp theo.

(Sắp đăng tải) [JavaScript] Bài 17 - Async & Await

Bình luận

Bài viết tương tự

- vừa được xem lúc

Giới thiệu Typescript - Sự khác nhau giữa Typescript và Javascript

Typescript là gì. TypeScript là một ngôn ngữ giúp cung cấp quy mô lớn hơn so với JavaScript.

0 0 500

- vừa được xem lúc

Bạn đã biết các tips này khi làm việc với chuỗi trong JavaScript chưa ?

Hi xin chào các bạn, tiếp tục chuỗi chủ đề về cái thằng JavaScript này, hôm nay mình sẽ giới thiệu cho các bạn một số thủ thuật hay ho khi làm việc với chuỗi trong JavaScript có thể bạn đã hoặc chưa từng dùng. Cụ thể như nào thì hãy cùng mình tìm hiểu trong bài viết này nhé (go).

0 0 414

- vừa được xem lúc

Một số phương thức với object trong Javascript

Trong Javascript có hỗ trợ các loại dữ liệu cơ bản là giống với hầu hết những ngôn ngữ lập trình khác. Bài viết này mình sẽ giới thiệu về Object và một số phương thức thường dùng với nó.

0 0 136

- vừa được xem lúc

Tìm hiểu về thư viện axios

Giới thiệu. Axios là gì? Axios là một thư viện HTTP Client dựa trên Promise.

0 0 117

- vừa được xem lúc

Imports và Exports trong JavaScript ES6

. Giới thiệu. ES6 cung cấp cho chúng ta import (nhập), export (xuất) các functions, biến từ module này sang module khác và sử dụng nó trong các file khác.

0 0 93

- vừa được xem lúc

Bài toán đọc số thành chữ (phần 2) - Hoàn chỉnh chương trình dưới 100 dòng code

Tiếp tục bài viết còn dang dở ở phần trước Phân tích bài toán đọc số thành chữ (phần 1) - Phân tích đề và những mảnh ghép đầu tiên. Bạn nào chưa đọc thì có thể xem ở link trên trước nhé.

0 0 229