Lỗi ném javascript mà không dừng thực thi

Gỡ lỗi là phần khó nhất của lập trình. Lỗi có thể xuất hiện trong mã của bạn theo nhiều cách khác nhau, cho dù là lỗi cú pháp, lỗi logic hay đáng sợ nhất là lỗi thời gian chạy. Lỗi thời gian chạy xảy ra bất cứ khi nào có điều gì đó không mong muốn xảy ra trong ứng dụng của bạn và chúng thường dẫn đến các sự cố nghiêm trọng có thể làm hỏng chương trình của bạn

Giống như nhiều ngôn ngữ, Node. js cung cấp cơ chế dự đoán lỗi trước khi chúng xảy ra. Khi xảy ra lỗi trong mã của bạn, nó sẽ biến thành một đối tượng được gọi là ngoại lệ. Xử lý đúng các trường hợp ngoại lệ này cho phép bạn phục hồi nhanh chóng từ các sự cố không lường trước, mang lại trải nghiệm người dùng tốt hơn nhiều

Trong bài đăng này, chúng ta sẽ xem xét nguyên nhân gây ra những lỗi này trong Node. js và cách khôi phục từ chúng

Điều gì có thể gây ra lỗi ngoại lệ trong Node. js?

Lỗi thời gian chạy có thể xảy ra theo nhiều cách khác nhau. Một ví dụ bao gồm việc tham chiếu đến một biến không xác định hoặc chuyển sai loại cho một đối số

Nút chung khác. lỗi js bao gồm

  1. Đánh giáLỗi. lỗi xảy ra trong chức năng toàn cầu
    Uncaught TypeError: Cannot read property 'someMethod' of null
    1
  2. phạm vi lỗi. những lỗi này xảy ra khi bạn cố gắng truy cập một biến nằm ngoài phạm vi của nó, chẳng hạn như cố gắng lấy phần tử thứ năm của một mảng chỉ có ba mục
  3. Tham khảoLỗi. những lỗi này phát sinh khi bạn cố gắng sử dụng một biến không tồn tại
  4. Lỗi cú pháp. những lỗi này đến từ mã không hợp lệ
  5. LoạiLỗi. điều này xảy ra khi bạn cố gắng sử dụng một biến không phải là loại hợp lệ
  6. Lỗi URI. lỗi này xảy ra bất cứ khi nào
    Uncaught TypeError: Cannot read property 'someMethod' of null
    2 hoặc
    Uncaught TypeError: Cannot read property 'someMethod' of null
    3 được cung cấp thông số không hợp lệ

Trong hầu hết các trường hợp, những ngoại lệ này xảy ra ngoài tầm kiểm soát của bạn. Ví dụ: nếu bạn chạy dòng mã sau

null.toString()

Bạn sẽ nhận được lỗi sau

Uncaught TypeError: Cannot read property 'someMethod' of null

Nút. js ném ngoại lệ

Tuy nhiên, bạn cũng có thể tự mình sửa lỗi

throw new Error('Throw makes it go boom!')

Tại sao bạn muốn làm điều này? . Ví dụ: giả sử bạn có một ứng dụng máy tính được viết bằng Node. js và bạn muốn báo lỗi nếu mẫu số trong hàm chia là 0

function divide(numerator, denominator) {
  if (denominator == 0) {
    throw new Error('divide by zero!')
  } 
  else {
    return numerator / denominator;
  }
}

Tại sao bạn muốn làm điều này? . Nhưng bạn có thể tạo một phân lớp lỗi tùy chỉnh

Uncaught TypeError: Cannot read property 'someMethod' of null
0

Điều này cho phép bạn thiết lập một lỗi phù hợp hơn trong mã

Uncaught TypeError: Cannot read property 'someMethod' of null
1

Nếu bạn tiếp tục khái niệm này, bạn có thể đưa ra lỗi cho bất kỳ loại sự cố nào. So sánh các cách xử lý lỗi sau

Uncaught TypeError: Cannot read property 'someMethod' of null
2

Bằng cách đưa ra ngoại lệ của riêng bạn, lợi ích trước mắt của bạn sẽ là cơ sở mã dễ đọc hơn, như trong trường hợp tuổi và tên ở trên. Tuy nhiên, các lớp lỗi của bạn cũng sẽ hiển thị trong nhật ký và quy trình phân tích dữ liệu, điều này có thể giúp bạn thu hẹp cụ thể những vấn đề có thể xảy ra. Khi cố gắng theo dõi một lỗi, có thể khó để hợp lý hóa ý nghĩa của Lỗi, trái ngược với

Uncaught TypeError: Cannot read property 'someMethod' of null
7 hoặc
Uncaught TypeError: Cannot read property 'someMethod' of null
8

Bất kể, bắt lỗi như thế này là điều cần thiết trong Node. js. Vì Node chạy trong môi trường không đồng bộ nên một sự kiện xảy ra đôi khi không ảnh hưởng ngay lập tức. Trong ví dụ của chúng tôi ở trên, chúng tôi đã cố gắng dựa vào

Uncaught TypeError: Cannot read property 'someMethod' of null
9 trong tình huống không tồn tại, tuy nhiên, chương trình sẽ gặp sự cố, nhưng không phải khi chúng tôi mong đợi. Mặt khác, try/catch hoạt động đồng bộ;

Làm thế nào để bạn bảo vệ ứng dụng của bạn chống lại các ngoại lệ?

Nếu bạn biết lỗi có thể xảy ra ở đâu, bước tiếp theo có thể là ngăn lỗi này gỡ bỏ ứng dụng của bạn hoặc làm phiền người dùng của bạn. Để ngăn chặn điều này, Node. js có một cú pháp đặc biệt được gọi là khối try-catch

Đúng như tên gọi của nó, khối try-catch cho phép bạn chạy một đoạn mã và nếu gặp lỗi, sẽ tạm dừng chương trình và cho phép bạn khôi phục. Hãy xem điều đó có thể hoạt động như thế nào trong thực tế với ví dụ

throw new Error('Throw makes it go boom!')
0 trước đây của chúng tôi. Giả sử bạn có một chức năng như thế này

Uncaught TypeError: Cannot read property 'someMethod' of null
7

Bây giờ, chúng tôi không thể đảm bảo rằng

throw new Error('Throw makes it go boom!')
0 sẽ hoạt động trên
throw new Error('Throw makes it go boom!')
2. Có thể đó là
throw new Error('Throw makes it go boom!')
3 hoặc có thể chức năng này được gọi trên một số đầu vào động của người dùng mà chúng tôi không thể kiểm soát. Vì chúng tôi biết rằng chúng tôi có khả năng gặp phải một
throw new Error('Throw makes it go boom!')
4 ở đây, chúng tôi có thể sử dụng khối thử bắt để dự đoán lỗi này và thực hiện một số việc khác

Uncaught TypeError: Cannot read property 'someMethod' of null
2

Nếu không có lỗi thì mã trong khối

Uncaught TypeError: Cannot read property 'someMethod' of null
5 không bao giờ được thực thi. Hãy nhớ rằng lỗi được cung cấp cho câu lệnh
Uncaught TypeError: Cannot read property 'someMethod' of null
5 phải khớp với lỗi mà bạn mong đợi, nếu không thì mã đó sẽ không chạy. Thật không may, điều này có thể ngăn mã của bạn bắt lỗi và thử bắt không hoạt động

Nếu bạn cho rằng một lỗi có thể xảy ra, nhưng bạn không chắc loại lỗi đó là gì và bạn muốn đảm bảo rằng bạn phát hiện ra bất kỳ lỗi tiềm ẩn nào, bạn chỉ có thể bảo vệ chống lại lớp cơ sở

Uncaught TypeError: Cannot read property 'someMethod' of null
6

Uncaught TypeError: Cannot read property 'someMethod' of null
6

Vì tất cả các lỗi đều mở rộng lớp cơ sở

Uncaught TypeError: Cannot read property 'someMethod' of null
6 này, nên nó sẽ phát hiện bất kỳ lỗi nào được ném ra

Một bổ sung thú vị khác là khả năng thêm câu lệnh

throw new Error('Throw makes it go boom!')
9 vào những dòng này. Ví dụ

Uncaught TypeError: Cannot read property 'someMethod' of null
0

throw new Error('Throw makes it go boom!')
9 sẽ luôn thực thi ở cuối khối try-catch, bất kể câu lệnh
Uncaught TypeError: Cannot read property 'someMethod' of null
5 có bắt lỗi hay không. Nó có thể dọn sạch mọi trạng thái còn lại, chẳng hạn như đóng kết nối cơ sở dữ liệu đang mở. Ít nhất một
Uncaught TypeError: Cannot read property 'someMethod' of null
5 hoặc một
throw new Error('Throw makes it go boom!')
9 phải có mặt trong một khối
function divide(numerator, denominator) {
  if (denominator == 0) {
    throw new Error('divide by zero!')
  } 
  else {
    return numerator / denominator;
  }
}
4

kết thúc

Các ngoại lệ và các khối thử bắt không phải là duy nhất đối với Node. Để biết tổng quan cấp cao hơn, bạn có thể xem tài liệu của họ về chủ đề này

Chúng ta đã nói rất nhiều về ngoại lệ trong bài viết này. Điều quan trọng cần lưu ý là lỗi vẫn có thể xảy ra với số lượng đáng báo động, bất chấp những nỗ lực tốt nhất của bạn để ngăn chặn chúng. Mã bị nhầm luôn có thể được đưa vào sản xuất và thay vì tạo ra các sự cố về tính khả dụng cho người dùng của bạn, một nền tảng như Rollbar có thể giúp bạn khắc phục các sự cố không lường trước được trước khi chúng trở thành sự cố. Với khả năng giám sát lỗi Node theo thời gian thực, quy trình công việc được hỗ trợ bởi AI và phân tích nguyên nhân gốc rễ, Rollbar có thể bảo vệ ứng dụng của bạn bằng cách dự đoán các sự cố trước khi chúng ảnh hưởng đến người dùng của bạn

Theo dõi, phân tích và quản lý lỗi với Rollbar

[Thanh cuộn đang hoạt động](https. // thanh cuộn. com/wp-content/uploads/2022/04/section-1-real-time-errors@2x-1-300x202. png)

Quản lý lỗi và ngoại lệ trong mã của bạn là một thách thức. Nó có thể làm cho việc triển khai mã sản xuất trở thành một trải nghiệm đáng sợ. Khả năng theo dõi, phân tích và quản lý lỗi trong thời gian thực có thể giúp bạn tiến hành một cách tự tin hơn. Rollbar tự động theo dõi và xử lý lỗi, giúp việc sửa lỗi trở nên dễ dàng hơn bao giờ hết. Thử nó ngay hôm nay

Việc ném lỗi có dừng thực thi JavaScript không?

Câu lệnh ném đưa ra một ngoại lệ do người dùng định nghĩa. Việc thực thi hàm hiện tại sẽ dừng (các câu lệnh sau khi ném sẽ không được thực thi) và quyền kiểm soát sẽ được chuyển đến khối catch đầu tiên trong lệnh gọi . Nếu không có khối bắt nào tồn tại giữa các chức năng của người gọi, chương trình sẽ kết thúc.

Việc ném một lỗi mới có dừng thực thi không?

ném Lỗi mới('đã xảy ra lỗi') — sẽ tạo một phiên bản Lỗi trong JavaScript và dừng thực thi tập lệnh của bạn, trừ khi bạn làm điều gì đó với Lỗi< . .

Điều gì xảy ra khi JavaScript đưa ra lỗi?

Khi xảy ra lỗi, JavaScript thường sẽ dừng và tạo thông báo lỗi . Thuật ngữ kỹ thuật cho điều này là. JavaScript sẽ đưa ra một ngoại lệ (ném một lỗi). JavaScript sẽ thực sự tạo một đối tượng Lỗi có hai thuộc tính. tên và tin nhắn.

Có chức năng kết thúc lỗi ném không?

Có, đúng đấy . Nó tạo ra một ngoại lệ đi lên ngăn xếp cuộc gọi.