JavaScript:
Xử lý lỗi
Cách thực hiện:
Dưới đây là khối try-catch kinh điển:
try {
// Mã có thể phát ra lỗi
let result = potentiallyRiskyOperation();
console.log('Thành công:', result);
} catch (error) {
// Cần làm gì nếu một lỗi xảy ra
console.error('Ối:', error.message);
}Đầu ra mẫu khi không có lỗi xảy ra:
Thành công: 42Và khi có lỗi:
Ối: Đã xảy ra sự cốĐối với mã bất đồng bộ, nơi đòi hỏi sử dụng promises, hãy dùng try-catch trong một hàm async:
async function fetchData() {
try {
let data = await fetch('https://api.example.com/data');
console.log('Dữ liệu đã được tải:', data);
} catch (error) {
console.error('Lỗi khi tải dữ liệu:', error.message);
}
}
fetchData();Sâu hơn
Xử lý lỗi trong JavaScript đã phát triển. Ngày xưa (ES3, khoảng năm 1999), chúng ta chỉ có khối try-catch. Không quá linh hoạt, nhưng nó đã hoàn thành công việc.
ES6 (2015) đã giới thiệu Promises và tặng chúng ta .then() và .catch(), cho phép chúng ta xử lý lỗi bất đồng bộ một cách nhẹ nhàng hơn.
fetch('https://api.example.com/data')
.then(data => console.log('Dữ liệu đã được tải:', data))
.catch(error => console.error('Lỗi khi tải dữ liệu:', error.message));Về chi tiết triển khai, khi một lỗi được phát ra, engine JavaScript tạo ra một đối tượng Error với những thuộc tính hữu ích như message và stack. Bạn cũng có thể tạo ra các loại lỗi tùy chỉnh bằng cách mở rộng lớp Error - rất tiện lợi cho những ứng dụng phức tạp hơn.
Những phương án khác? Bạn có thể bỏ qua xử lý lỗi (không phải là ý tưởng hay), sử dụng callbacks với tham số lỗi đầu tiên (xin chào, phong cách Node.js), hoặc trở nên tinh tế hơn với các thư viện và frameworks cung cấp quan điểm của chúng.
Xem thêm
Để hiểu thêm về xử lý lỗi:
- MDN về try-catch: MDN try…catch
- Async/Await: MDN hàm async
- Hướng dẫn về Promises: MDN Promises
- Tạo và phát lỗi tùy chỉnh: MDN Error