Finally javascript cách sử dụng như thế nào mà thấy pro toàn sử dụng?

Nội dung bài viết

Video học lập trình mỗi ngày

Xử lý lỗi trong javascript thì có thể nghĩ tới việc thêm try catch finally. Nhưng ở đây có mấy ai hiểu và sử dụng finally để xử lý lỗi hay chưa? Bài này sẽ phân tích tác dụng của finally trong javascript một cách kỹ nhất dành cho mọi level.


finally javascript


Trước đây, chúng ta đã nói về cách hoạt động của một try catch, ở đó chúng ta đã biết vì sao try catch không hoạt động ở một số trường hợp trong bài viết trước. Nhưng ở đó, nếu ai là người kỹ tính và là một lập trình viên cẩn thận thì sẽ hiểu là ở đó thiếu một từ khoá rất quan trọng đó là Finally js. 


Cấu trúc try...catch cho phép một khối mã finally được thêm vào cuối, và nhiệm vụ của finally đó chính là những câu lệnh nằm trong khối mã finally phải được chạy hay được thực thi ở cuối cho dù có lỗi hay không. Nghĩa là luôn luôn chạy bằng mọi giá. Đó là lý thuyết, như thường lệ chúng ta sẽ đi xem thực tế nó hoạt động như trên hay không?


finally try catch


Cùng xem một trong những ví dụ sau, và đây là ví dụ đầu tiên, đơn giản nhất. 


### Ví dụ 1:

function cleansUp() {
  try {
    throw new Error('Lỗi gì đây?……');
    console.log('Hàm này sẽ không được với tới');
  } finally {
    console.log('Hoàn thành');
  }
}

cleansUp()
// Hoàn thành
//Uncaught Error: Lỗi gì đây?……"


Trong đoạn mã trên, vì không có câu lệnh catch nên một khi xảy ra lỗi, đoạn mã sẽ ngừng thực thi. Trước khi ngắt thực thi, khối mã finally sẽ được thực thi trước , sau đó thông báo lỗi sẽ được nhắc cho người dùng. Để hiểu rõ hơn, chúng ta đi xem xét thêm một ví dụ nữa, và lần này xem kỹ hơn 


### Ví dụ 2:


var count = 0;
function countUp() {
  try {
    return count;
  } finally {
    count++;
  }
}

countUp()
// 0
count
// 1


Ví dụ sau đây cho thấy rằng việc return thực thi câu lệnh được sắp xếp trước finally và những câu lệnh trong khối mã finally trả về sau khi mã được thực thi. Cụ thể hơn là Ví dụ 2 trên cho thấy rằng giá trị return count xảy ra trước khi những câu lệnh trong finally được thực thi. 


### Ví dụ 3 


Đây có lẽ là một kịch bản thực tế và điển hình nhất và hiểu rõ nhất về câu lệnh finally.

openFile();

try {
  writeFile(Data);
} catch(e) {
  handleError(e);
} finally {
  closeFile();
}

Ở ví dụ trên chúng ta gọi một hàm mở một File. sau đó ghi nội dung vào File. Nếu không có lỗi trong quá trình ghi thì, closeFile() có nhiệm vụ là đóng lại file này và hoàn tất quá trình ghi. Nếu xảy ra lỗi thì handleError() sẽ xứ lý những lỗi trước trong qúa trình ghi, và sau đó khối mã finally sẽ được sử dụng để đóng tệp.


Tóm lại


Một bài viết ngắn gọn nhưng mang tới cho bạn đọc 3 ví dụ, giúp cho các bạn hiểu cơ chế xử lý lỗi trong javascript với lệnh finally. Học là phải học những phần người ta ít quan tâm, lúc đó mới gọi là nổi bật trước đám đông. Phân tích kỹ những tình huống, phán đoán và thực thi đó là một phần trong lập trình, nhưng để handle Error thì khó ai có thể làm một cách hoàn chỉnh. 


Nếu bạn là một trong những người đọc bài viết này thì nên đọc thêm : https://davidwalsh.name/fix-javascript-errors

Có thể bạn đã bị missing