js中setTimeout導(dǎo)致try catch無法捕獲異常的問題解決
碰到一個(gè)有趣的小問題,setTimeout、ajax異步請(qǐng)求回調(diào)里的代碼發(fā)生了異常,try catch卻沒有捕獲到。
function test(){
try {
setTimeout(function(){
throw 'error';
}, 1);
} catch (e) {
console.log("try catch里捕獲的異常" + e);
}
}
function testAjax(){
try {
$.ajax({
url: "xxx",
cache: false,
success: function(data){
throw 'error';
}
});
} catch (e) {
console.log("try catch里捕獲的異常" + e);
}
}
運(yùn)行結(jié)果如下:

那么如何捕獲這里面的異常呢?總不可能在每個(gè)延時(shí)函數(shù)里再增加異常捕獲。
最終找到了:window.onerror
// 注意事項(xiàng):js中對(duì)象初始化慢于方法,在方法調(diào)用時(shí)最好加個(gè)延遲,讓window.onerror加載完畢。
window.onerror = function(message, source, lineno, colno, error){
// message:錯(cuò)誤消息(字符串)。在HTML οnerrοr=""處理程序event(sic!)中可用。
// source:引發(fā)錯(cuò)誤的腳本的URL(字符串)
// lineno:發(fā)生錯(cuò)誤的行號(hào)(數(shù)值)
// colno:發(fā)生錯(cuò)誤的行的列號(hào)(數(shù)值)
// error:錯(cuò)誤對(duì)象(對(duì)象)
var message = [
'Message: ' + msg,
'URL: ' + url,
'Line: ' + lineNo,
'Column: ' + columnNo,
'Error object: ' + JSON.stringify(error)
].join(' - ');
console.log(message);
// 當(dāng)函數(shù)返回true時(shí),這可以防止觸發(fā)默認(rèn)事件處理程序(就是瀏覽器控制臺(tái)打印紅色的異常信息)。
return true;
};
到此這篇關(guān)于js中setTimeout導(dǎo)致try catch無法捕獲異常的問題解決的文章就介紹到這了,更多相關(guān)js try catch無法捕獲異常內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于Bootstrap框架實(shí)現(xiàn)圖片切換
這篇文章主要介紹了基于Bootstrap框架實(shí)現(xiàn)圖片切換的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-03-03
MUI頂部選項(xiàng)卡的用法(tab-top-webview-main)詳解
最近用MUI做手機(jī)app應(yīng)用的時(shí)候,遇到的小bug,這里小編給大家分享MUI頂部選項(xiàng)卡的用法(tab-top-webview-main)詳解,感興趣的朋友一起看看吧2017-10-10
javascript中eval和with用法實(shí)例總結(jié)
這篇文章主要介紹了javascript中eval和with用法,結(jié)合實(shí)例形式總結(jié)分析了JavaScript中eval和with的功能、用法與相關(guān)注意事項(xiàng),具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11
javascript+xml技術(shù)實(shí)現(xiàn)分頁(yè)瀏覽
基于web的技術(shù)中,分頁(yè)是一個(gè)老的不能再老的,但大家津津樂道的問題,隨著xml技術(shù)的日漸應(yīng)用,把xml應(yīng)用到分頁(yè)當(dāng)中,也是一種可能,當(dāng)然網(wǎng)上的教程很多,當(dāng)我都是看得稀里糊涂,索性自己寫一個(gè),與大家分享、指正。2008-07-07
微信小程序吸底區(qū)域適配iPhoneX的實(shí)現(xiàn)
這篇文章主要介紹了微信小程序吸底區(qū)域適配iPhoneX的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04

