Làm cách nào để bắt lỗi 404 JavaScript?
Hành động không đồng bộ đôi khi có thể thất bại. trong trường hợp có lỗi, lời hứa tương ứng sẽ bị từ chối. Chẳng hạn, 5 không thành công nếu máy chủ từ xa không khả dụng. Chúng ta có thể sử dụng 6 để xử lý lỗi (từ chối)Chuỗi lời hứa là tuyệt vời ở khía cạnh đó. Khi một lời hứa bị từ chối, điều khiển sẽ chuyển đến trình xử lý từ chối gần nhất trong chuỗi. Điều đó rất thuận tiện trong thực tế Chẳng hạn, trong đoạn mã bên dưới, URL bị sai (không có trang web nào như vậy) và 6 xử lý lỗi
Hoặc, có thể, mọi thứ đều ổn với trang web, nhưng phản hồi không phải là JSON hợp lệ
Cách dễ nhất để bắt tất cả các lỗi là nối thêm 6 vào cuối chuỗi
Thông thường, 6 hoàn toàn không kích hoạt, vì không có lỗi. Nhưng nếu bất kỳ lời hứa nào ở trên bị từ chối (sự cố mạng hoặc json không hợp lệ hoặc bất cứ điều gì), thì nó sẽ bắt được nóMã của trình thực thi lời hứa và trình xử lý lời hứa có một "_______60 vô hình" xung quanh nó. Nếu một ngoại lệ xảy ra, nó sẽ bị bắt và coi như một sự từ chối Ví dụ, mã này
…Hoạt động chính xác như thế này 0"Vô hình 0" xung quanh người thi hành sẽ tự động bắt lỗi và coi đó là lỗi bị từ chốiĐiều này xảy ra không chỉ trong trình thực thi mà cả trong trình xử lý của nó. Nếu chúng tôi 2 bên trong trình xử lý 3, điều đó có nghĩa là một lời hứa bị từ chối, do đó, điều khiển sẽ chuyển đến trình xử lý lỗi gần nhấtĐây là một ví dụ 4Điều này xảy ra với tất cả các lỗi, không chỉ những lỗi do câu lệnh 2 gây ra. Ví dụ, một lỗi lập trình 6 6 cuối cùng không chỉ nắm bắt các từ chối rõ ràng mà còn có các lỗi không thường xuyên trong các trình xử lý ở trênNhư chúng ta đã nhận thấy, 6 hoạt động giống như 0. Chúng tôi có thể có bao nhiêu trình xử lý 3 tùy thích, sau đó sử dụng một 6 duy nhất ở cuối để xử lý lỗi trong tất cả chúngTrong một 0 thông thường, chúng tôi có thể phân tích lỗi và có thể viết lại nếu không xử lý được. Điều tương tự cũng có thể xảy ra với những lời hứaNếu chúng tôi 2 bên trong 6, thì điều khiển sẽ chuyển đến trình xử lý lỗi gần nhất tiếp theo. Và nếu chúng tôi xử lý lỗi và kết thúc bình thường, thì nó sẽ tiếp tục đến trình xử lý 3 thành công gần nhấtTrong ví dụ dưới đây, 6 đã xử lý lỗi thành công 7Ở đây khối 6 kết thúc bình thường. Vì vậy, trình xử lý 3 thành công tiếp theo được gọi làTrong ví dụ dưới đây, chúng ta thấy tình huống khác với 6. Trình xử lý 8 bắt lỗi và không thể xử lý nó (e. g. nó chỉ biết cách xử lý 9), vì vậy nó lại ném nó 3Sau đó, việc thực hiện nhảy từ 6 8 đầu tiên sang 02 tiếp theo trong chuỗiTrong phần bên dưới, chúng ta sẽ thấy một ví dụ thực tế về việc ném lại Hãy cải thiện việc xử lý lỗi cho ví dụ tải người dùng Lời hứa được trả về bằng cách tìm nạp từ chối khi không thể thực hiện yêu cầu. Ví dụ: không có máy chủ từ xa hoặc URL không đúng định dạng. Nhưng nếu máy chủ từ xa phản hồi với lỗi 404 hoặc thậm chí là lỗi 500 thì đó được coi là phản hồi hợp lệ Nếu máy chủ trả về một trang không phải JSON có lỗi 500 trong dòng 8 thì sao? 9Hiện tại, mã cố gắng tải phản hồi dưới dạng JSON bất kể điều gì và chết do lỗi cú pháp. Bạn có thể thấy điều đó bằng cách chạy ví dụ trên, vì tệp 05 không tồn tạiĐiều đó không tốt, vì lỗi chỉ rơi vào chuỗi, không có chi tiết. những gì thất bại và ở đâu Vì vậy, hãy thêm một bước nữa. chúng ta nên kiểm tra thuộc tính 06 có trạng thái HTTP không và nếu không phải là 200 thì sẽ báo lỗi 0
Điều tuyệt vời khi có lớp lỗi của riêng chúng ta là chúng ta có thể dễ dàng kiểm tra nó trong mã xử lý lỗi bằng cách sử dụng 40Chẳng hạn, chúng tôi có thể đưa ra yêu cầu và sau đó nếu chúng tôi nhận được 404 – hãy yêu cầu người dùng sửa đổi thông tin Mã bên dưới tải người dùng có tên đã cho từ GitHub. Nếu không có người dùng như vậy, thì nó sẽ hỏi tên chính xác 1Xin lưu ý. 6 ở đây bắt hết lỗi, nhưng nó “biết xử lý” chỉ có duy nhất 42. Trong trường hợp cụ thể đó, điều đó có nghĩa là không có người dùng nào như vậy và 6 chỉ thử lại trong trường hợp đóĐối với các lỗi khác, nó không biết điều gì có thể xảy ra. Có lẽ một lỗi lập trình hoặc một cái gì đó. Vì vậy, nó chỉ vẽ lại nó trong dòng 8Điều gì xảy ra khi một lỗi không được xử lý? Hoặc chúng ta có thể quên thêm một trình xử lý lỗi vào cuối chuỗi, như ở đây 2Trong trường hợp có lỗi, trạng thái lời hứa trở thành "bị từ chối" và quá trình thực thi sẽ chuyển đến trình xử lý từ chối gần nhất. Nhưng không có trình xử lý như vậy trong các ví dụ trên. Vì vậy, lỗi bị "kẹt". Không có mã để xử lý nó Trong thực tế, giống như lỗi thông thường chưa được xử lý, điều đó có nghĩa là đã xảy ra sự cố nghiêm trọng Điều gì xảy ra khi một lỗi thông thường xảy ra và không bị bắt bởi 0? . Điều tương tự cũng xảy ra với các từ chối lời hứa chưa được xử lýCông cụ JavaScript theo dõi các từ chối như vậy và tạo ra lỗi toàn cầu trong trường hợp đó. Bạn có thể thấy nó trong bảng điều khiển nếu bạn chạy ví dụ trên Trong trình duyệt, chúng tôi có thể bắt lỗi như vậy bằng cách sử dụng sự kiện 47 3Sự kiện là một phần của Nếu xảy ra lỗi và không có 6, trình xử lý 47 sẽ kích hoạt và nhận đối tượng 60 với thông tin về lỗi, vì vậy chúng tôi có thể thực hiện điều gì đóThông thường, những lỗi như vậy không thể khắc phục được, vì vậy cách tốt nhất của chúng tôi là thông báo cho người dùng về sự cố và có thể báo cáo sự cố cho máy chủ Trong các môi trường không có trình duyệt như Node. js, có nhiều cách tương tự khác để theo dõi các lỗi chưa được xử lý
Và cuối cùng, nếu chúng ta có chỉ báo tải, thì 66 là một trình xử lý tuyệt vời để dừng nó khi quá trình tìm nạp hoàn tất 4Ở đây trên dòng 67, chúng tôi biểu thị tải bằng cách làm mờ tài liệu. Phương pháp không thành vấn đề, có thể sử dụng bất kỳ loại chỉ báo nào thay thếKhi lời hứa được giải quyết, có thể là tìm nạp thành công hoặc có lỗi, 68 kích hoạt ở dòng 69 và dừng chỉ báoCó một mẹo nhỏ trên trình duyệt 8 với việc trả lại lời hứa không hết thời gian chờ từ 68. Đó là bởi vì một số trình duyệt (như Chrome) cần "một chút thời gian" bên ngoài trình xử lý lời hứa để vẽ các thay đổi tài liệu. Vì vậy, nó đảm bảo rằng chỉ báo được dừng trực quan trước khi đi xa hơn trên dây chuyền
Làm cách nào để khắc phục lỗi 404?Dưới đây là một số cách bạn có thể thử khắc phục lỗi 404. . Kiểm tra kỹ URL bạn đã nhập, đặc biệt nếu bạn nhập bằng tay. . Làm mới trang web. . Sử dụng Google (hoặc một công cụ tìm kiếm tương tự) để thử và tìm lại trang. . Cố gắng đến đó trên một thiết bị khác. . Sử dụng Wayback Machine của Internet Archive Tìm nạp có bị lỗi trên 404 không?Lời hứa tìm nạp() không từ chối do lỗi HTTP ( 404 , v.v. ). |