Chuyển đến nội dung chính
Mô-đun 5 · Bài học 4 trong tổng số 420/32 trong khóa học~12 min
Bài học theo mô-đun (4/4)

thử/bắt/ném

lỗi trong JavaScript là một giá trị (thường là đối tượng Error) làm gián đoạn luồng thông thường và hiển thị ngăn xếp cuộc gọi cho đến khi có người nắm bắt được. Cấu trúc để xử lý trường hợp này là try / catch.

Đưa ra lỗi: throw

JS
function dividi(a, b) {
  if (b === 0) {
    throw new Error('Divisione per zero');
  }
  return a / b;
}

throw ngay lập tức làm gián đoạn chức năng hiện tại.

Đang bắt: try / catch

JS
try {
  const r = dividi(10, 0);
  console.log('ok', r);
} catch (err) {
  console.log('errore:', err.message); // 'errore: Divisione per zero'
}

// Il programma continua qui, anche se c'è stato un errore.

Mọi thứ bên trong try đều được thực thi; nếu xảy ra lỗi (thông qua throw hoặc bởi bất kỳ thao tác nào không thành công), điều khiển sẽ nhảy tới khối catch. Biến sau catch (...) nhận được lỗi.

finally (tùy chọn)

Mã luôn chạy, có lỗi hay không. Hữu ích để đóng tài nguyên:

JS
try {
  // ... operazione rischiosa
} catch (err) {
  // ... log
} finally {
  // ... pulizia (sempre eseguita)
}

Khi nào nên sử dụng nó (và khi nào không)

  • Có: Thao tác I/O (JSON.parse trên đầu vào không đáng tin cậy, fetch, truy cập đĩa), chuyển đổi có thể thất bại.
  • Có thể không: đối với dòng chảy bình thường. Nếu bạn biết đầu vào có thể không hợp lệ, tốt hơn hết bạn nên kiểm tra nó với if hơn là ném và bắt.
JS
// Tipico: parsing JSON difensivo
function parseJsonSafe(text) {
  try {
    return { ok: true, value: JSON.parse(text) };
  } catch (err) {
    return { ok: false, error: err.message };
  }
}

parseJsonSafe('{"a":1}'); // { ok: true, value: {a:1} }
parseJsonSafe('non json'); // { ok: false, error: '...' }

Hãy thử nó

tập thể dục#js.m5.l4.e1
Nỗ lực: 0Đang tải…

Xác định `safeDivide(a, b)`: nếu b bằng 0 sẽ đưa ra Lỗi với thông báo 'Chia cho mỗi 0', nếu không thì trả về a/b.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

if (b === 0) ném Lỗi mới('...'); sau đó trả về a/b.

Giải pháp khả dụng sau 3 lần thử

Xem lại bài tập

tập thể dục#js.m5.l4.e2
Nỗ lực: 0Đang tải…

Xác định `parseJsonSafe(text)`: nếu văn bản hợp lệ JSON trả về { ok: true, value: <object> }, nếu không thì { ok: false }. Sử dụng thử/bắt trên JSON.parse.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

Gói JSON.parse vào thử; trong phần bắt return { ok: false }.

Giải pháp khả dụng sau 3 lần thử