2012-01-25 33 views
7

Tôi biết rằng Chrome có một số known bug không giữ nguyên stacktrace khi thực hiện lại ngoại lệ trong Javascript.Có cách nào để giải quyết một ngoại lệ và giữ nguyên stacktrace trong Javascript không?

Tôi có đoạn code sau chạy trong Chrome:

try { 
    try { 
     runCodeThatMayThrowAnException(); 
    } catch (e) { 
     // I'm handing the exception here (displaying a nice message or whatever) 
     // Now I want to rethrow the exception 
     throw (e); 
    } 
} catch (e) { 
    // The stacktrace was lost here :(
} 

Có cách nào để giữ stacktrace? Một trình cắm thêm jQuery có thể? Bất kỳ cách giải quyết hoặc ý tưởng nào?

+0

Tôi có thể biết lý do bạn chọn thử hai lần ... bắt không? –

+0

Đầu tiên, bởi vì tôi cần hiển thị một thông điệp tốt đẹp cho người dùng trong trường hợp một trong những dịch vụ không có sẵn. Crashing không phải là một lựa chọn. Thứ hai, vì tôi cần gửi nội dung của ngoại lệ javascript ở đâu đó đến chương trình phụ trợ của tôi để biết chính xác những gì đã xảy ra. Có lẽ đó là một lỗi và tôi muốn sửa chữa nó trước khi khách hàng gọi cho tôi nói rằng trang web không hoạt động. – rcarrillopadron

+0

Nhưng tại sao một cấp độ thử ... bắt là không đủ? Có phải vì bạn muốn tổng hợp tất cả các thông báo lỗi? –

Trả lời

4

Trong khối catch thức thử

throw e.stack; 

Và tôi là một trong những cuối cùng (một trong những cách vào trình duyệt). Nếu bạn làm tổ thử/nắm bắt sâu hơn, bạn cần thay đổi các lần ném trước đó của mình.

function throwError() { 
     var test = _undefined.propertyAccess; 
    } 
    try { 
     try { 
      try { 
       throwError(); 
      } catch (e) { 
       alert("exception: " + e.stack); 
       throw e; 
      } 
     } catch (e) { 
      console.log(e.stack); 
      throw e; 
     } 
    } catch (e) { 
     throw e.stack; 
    } 

Lỗi lạ là gì.

Các vấn đề liên quan