2013-04-19 59 views
9

Tôi giả sử gọi 3 javascript (jquery) các tập tin như thế này:Làm cách nào để bỏ qua hoặc bỏ qua lỗi trong javascript/jquery?

<script type="text/javascript" src="js/file1.js"></script> 
<script type="text/javascript" src="js/file2.js"></script> 
<script type="text/javascript" src="js/file3.js"></script> 

On file2.js có kịch bản hay chức năng gặp khó khăn, ví dụ, gọi là chức năng không tồn tại. Hậu quả do lỗi trong file2.js là các tập lệnh trong file3.js sẽ không được thực thi.

Có cách nào để viết mã trong file3.js vẫn được thực hiện không? Có thể bỏ qua hoặc bỏ qua lỗi trên file2.js?

Cảm ơn bạn.

+3

try/catch, nhưng thực sự bạn nên sửa chữa các vấn đề tiềm ẩn. –

+0

nếu bạn biết có lỗi và bạn từ chối sửa lỗi, tại sao lại bao gồm tệp? cơ hội là phần lớn tệp đó sẽ không chạy đúng cách do lỗi – aug

+0

Có thể trùng lặp của [Bỏ qua lỗi cú pháp javascript trong một trang và tiếp tục thực thi tập lệnh] (http://stackoverflow.com/questions/12219154/ignore- javascript-cú pháp-lỗi-trong-một-trang-và-tiếp-thực thi-kịch bản) –

Trả lời

13

Bạn có thể sử dụng một khối try catch xung quanh mã với lỗi

try{ 

//code that causes an error 

}catch(e){ 

functionToHandleError(e); 
} 
//continue from here 

Nhưng bạn chỉ nên làm điều đó nếu lỗi là một tình trạng gọi/vấn đề không thể tránh khỏi với một thư viện bên ngoài hoặc chỉ xảy ra trên người dùng xấu đầu vào. Bạn không nên sử dụng nó để cho phép chương trình tiếp tục chạy bằng mọi giá.

Một số cách để tránh các lỗi

  • kiểm tra rằng các chức năng tồn tại trước khi gọi họ
  • kiểm tra rằng một đối tượng tồn tại trước khi tham khảo thuộc tính của nó
  • nếu người dùng nhập vào là tham gia, xác nhận các đầu vào để kiểm tra xem nó loại/phạm vi dự kiến ​​/ v.v.
  • nếu đây là sự cố tải đơn hàng xem xét sắp xếp lại tập lệnh của bạn hoặc nếu đây là ứng dụng lớn hơn sử dụng hệ thống quản lý phụ thuộc như requireJS
  • nếu đối tượng không xác định sau yêu cầu không đồng bộ, hãy nhớ rằng mã không chờ trên yêu cầu không đồng bộ và sẽ không được xác định cho đến sau đó. Mã giao dịch với các giá trị được cung cấp phải được thực hiện trong một hàm gọi lại hoặc sử dụng các lệnh deffereds/promise.
  • nếu bạn đang tham chiếu đến các phần tử dom, hãy xem xét việc bắt đầu mã JS của bạn từ bên trong một hàm chạy khi DOM được tải như tài liệu của jQuery.ready hoặc window.onload nguyên gốc.
  • nếu biến javascript được khai báo mà không có từ khóa var hoặc được đính kèm với đối tượng chung, chúng có thể được sửa đổi ở những vị trí khác với chúng được khai báo. Javascript cũng không có phạm vi khối. Đảm bảo bạn biết tất cả các địa điểm mà các biến của bạn đang được sửa đổi và cố gắng giới hạn phạm vi biến của bạn khi có thể. Đặc biệt là tránh sử dụng quá nhiều biến toàn cầu để giữ trạng thái, vì nó có thể khó khăn để biết trạng thái hiện tại mà không có nhiều kiểm tra null/loại.

Một số cách để xử lý các lỗi

  • Nếu một vấn đề dự kiến ​​của nó (IE nếu đầu vào có thể được sản phẩm nào và yêu cầu xử lý khác nhau), tốt nhất là kiểm tra xem nó với một câu lệnh if trước. Nếu bạn không muốn thực hiện điều đó, bạn có thể sử dụng try/catch để truyền dữ liệu nhập, yêu cầu đầu vào mới hoặc hành động trên đầu vào được đưa ra dưới dạng phê duyệt.

  • nếu đó là sự cố không mong muốn (IE bạn không biết điều gì đang xảy ra), khối catch có thể là nơi tốt để xuất thông tin chẩn đoán trong quá trình phát triển.IE, không chỉ bắt nó và để nó thất bại, tạo ra một thông báo để cho bạn hoặc các nhà phát triển khác biết nơi nó không thành công, và sau đó sử dụng các công cụ phát triển web của trình duyệt yêu thích của bạn để kiểm tra các giá trị tại thời điểm đó, và thêm xử lý cho trường hợp đó để khắc phục.

gì không nên làm

  • đặt try/catch trong, và sau đó chỉ cần để cho các chương trình tiếp tục chạy. Nếu mã không chạy đúng là không cần thiết, hãy loại bỏ nó. Nếu nó là cần thiết và không hoạt động chính xác, hãy sửa nó.

  • sử dụng try catches làm xác nhận đầu vào của bạn (IE nếu chức năng là null nó sẽ ném một ngoại lệ và tôi sẽ bắt nó, sau đó tôi biết chức năng là null). Bất cứ khi nào có thể, hãy kiểm tra mọi lỗi dự kiến. Try/catches nên xử lý "ngoại lệ" khi hành vi bất thường và bạn cần phải đi xuống một đường dẫn mã thay thế hoặc cảnh báo cho người dùng rằng có điều gì đó sai.

1

Bó cuộc gọi có kết quả trong một lỗi trong một khối try ... catch:

try { 
    callNonExistentMethod(); 
} 
catch (e) { 
    //Handle the error if you wish. 
} 
1

tôi sẽ đề nghị bổ sung kiểm tra thích hợp rỗng xung quanh đối tượng (trong đó có chức năng) trước khi giả định chúng tồn tại, để mã sẽ thất bại một cách duyên dáng.

Dưới đây là một số ý tưởng: Javascript check if function exists

1

bạn có thể dùng thử và bắt statements.And kiểm tra cho null bằng cách sử dụng != null trạng

try{ 


}catch(e){ 

} 
7

Khi bạn không có thời gian để gỡ lỗi thử điều này:

function stoperror() { 
    return true; 
} 

Gọi nó:

window.onerror = stoperror; 

Chức năng rất đơn giản: tạo một hàm luôn trả về true, và sau đó bất cứ khi nào xảy ra lỗi, hãy gọi hàm này (trả về true và triệt tiêu lỗi).

1

bạn có thể tiết kiệm cho mình từ "chức năng là không xác định" bằng cách sử dụng này

//Simple function that will tell if the function is defined or not 
function is_function(func) { 
    return typeof window[func] !== 'undefined' && $.isFunction(window[func]); 
} 

//usage 

if (is_function("myFunction") { 
    alert("myFunction defined"); 
} else { 
    alert("myFunction not defined"); 
} 
Các vấn đề liên quan