導航:首頁 > 異常信息 > 捕獲網路請求的異常處理

捕獲網路請求的異常處理

發布時間:2022-09-14 22:49:46

A. 網路請求出錯什麼意思

一般來說是由於自己本身網路的問題造成網路請求失敗,但也存在伺服器出現問題,導致網路請求錯誤。
自身網路造成的網路請求錯誤非常常見,也非常容易解決。如果用戶當前的信號較差或者網速較差,這些都會出現網路請求錯誤的發生。建議用戶更換質量較好的網路,比如WiFi網路。或者去一些信號較好的地方解決該問題。
如果用戶的信號網速都沒有問題,但是依舊出現網路請求錯誤,可以看看用戶的移動數據有沒有打開,如果移動數據沒有打開也是會出現網路請求錯誤的。如果只是個別軟體出現網路請求錯誤,用戶可以在設置中看看有沒有禁止該軟體使用網路數據。禁用後的軟體也會出現網路請求錯誤。如果這個軟體沒有被禁用數據,但是依舊提示網路請求錯誤,這就表明該軟體的伺服器出現了問題,一般都是訪問量突然增大,造成伺服器崩潰顯示網路請求錯誤。

B. 網路異常連接如何處理

為了有效避免網路連接不穩定的故障,我們最好使用質量比較好的網路連接線纜,而且要控制好網路線纜的傳輸距離,不要讓網路線與高壓線纜、通信線纜相互纏繞在一起,因為線纜質量的好壞、傳輸距離的遠近以及受外界信號干擾程度的高低,都有可能導致網路連接不穩定。

C. Java 捕捉到的異常怎麼處理

使用
try{

}catch(){

}

在catch裡面捕獲異常並進行處理
例如
int i;
try{
i = 100/0;
}catch(Exception e){
這里你可以顯示錯誤信息
System.out.println(e.getMessage);
或者處理異常
......
}

D. Web前端工程師如何處理Web前端的異常_

今天小編要跟大家分享的文章是關於Web前端工程師如何處理前端的異常。前端一直是距離用戶最近的一層,隨著產品的日益完善,我們會更加註重用戶體驗,而前端異常卻如鯁在喉,甚是煩人。下面我們就來看一看前端工程師該如何處理前端異常。一、為什麼要處理異常異常是不可控的,會影響最終的呈現結果,但是我們有充分的理由去做這樣的事情。


1.增強用戶體驗;
2.遠程定位問題;
3.未雨綢繆,及早發現問題;
4.無法復線問題,尤其是移動端,機型,系統都是問題;
5.完善的前端方案,前端監控系統;


對於JS而言,我們面對的僅僅只是異常,異常的出現不會直接導致JS引擎崩潰,最多隻會使當前執行的任務終止。二、需要處理哪些異常?對於前端來說,我們可做的異常捕獲還真不少。總結一下,大概如下:


·___S語法錯誤、代碼異常


·___JAX請求異常


·___蔡試醇釉匾斐


·___romise異常


·___frame異常


·___纈_cripterror


·___覽:塗ǘ


下面我會針對每種具體情況來說明如何處理這些異常。三、Try-Catch的誤區try-catch只能捕獲到同步的運行時錯誤,對語法和非同步錯誤卻無能為力,捕獲不到。
1.同步運行時錯誤:


try{
letname='jartto'
console.log(nam);
}catch(e){
console.log('捕獲到異常:',e);
}


輸出:


捕獲到異常:ReferenceError:namisnotdefined
at:3:15


2.不能捕獲到語法錯誤,我們修改一下代碼,刪掉一個單引號:


try{
letname='jartto;
console.log(nam);
}catch(e){

console.log('捕獲到異常:',e);
}


輸出:


UncaughtSyntaxError:Invalidorunexpectedtoken


不過語法錯誤在我們開發階段就可以看到,應該不會順利上到線上環境。


3.非同步錯誤


try{
setTimeout(()=>{
undefined.map(v=>v);
},1000)
}catch(e){
console.log('捕獲到異常:',e);
}


我們看看日誌:


UncaughtTypeError:Cannotreadproperty'map'of
undefined
atsetTimeout(:3:11)


並沒有捕獲到異常,這是需要我們特別注意的地方。四、window.onerror不是萬能的當JS運行時錯誤發生時,window會觸發一個ErrorEvent介面的error事件,並執行window.onerror()。/**
*@param{String}message錯誤信息
*@param{String}source出錯文件
*@param{Number}lineno行號
*@param{Number}colno列號
*@param{Object}errorError對象(對象)
*/

window.onerror=function(message,source,lineno,colno,error){
console.log('捕獲到異常:',{message,source,lineno,colno,error});
}

1.首先試試同步運行時錯誤


window.onerror=function(message,source,lineno,colno,
error){
//message:錯誤信息(字元串)。
//source:發生錯誤的腳本URL(字元串)
//lineno:發生錯誤的行號(數字)
//colno:發生錯誤的列號(數字)
//error:Error對象(對象)
console.log('捕獲到異常:',{message,source,lineno,colno,
error});
}
Jartto;


可以看到,我們捕獲到了異常:

2.再試試語法錯誤呢?


window.onerror=function(message,source,lineno,colno,
error){
console.log('捕獲到異常:',{message,source,lineno,colno,error});
}
letname='Jartto


控制台列印出了這樣的異常:


UncaughtSyntaxError:Invalidorunexpectedtoken


什麼,竟然沒有捕獲到語法錯誤?


3.懷著忐忑的心,我們最後來試試非同步運行時錯誤:


window.onerror=function(message,source,lineno,colno,
error){
console.log('捕獲到異常:',{message,source,lineno,colno,error});
}
setTimeout(()=>{
Jartto;
});


控制台輸出了:


捕獲到異常:{message:"Uncaught
ReferenceError:Jarttoisnotdefined",source:
"http://127.0.0.1:8001/",lineno:36,colno:5,error:
ReferenceError:Jarttoisnotdefined
atsetTimeout(http://127.0.0.1:8001/:36:5)}


4.接著,我們試試網路請求異常的情況:






我們發現,不論是靜態資源異常,或者介面異常,錯誤都無法捕獲到。


補充一點:window.onerror函數只有在返回true的時候,異常才不會向上拋出,否則即使是知道異常的發生控制台還是會顯示UncaughtError:xxxxx


window.onerror=function(message,source,lineno,colno,
error){
console.log('捕獲到異常:',{message,source,lineno,colno,error});
returntrue;
}
setTimeout(()=>{
Jartto;
});


控制台就不會再有這樣的錯誤了:


UncaughtReferenceError:Jarttoisnotdefined
atsetTimeout((index):36)


需要注意:onerror最好寫在所有JS腳本的前面,否則有可能捕獲不到錯誤;onerror無法捕獲語法錯誤;


到這里基本就清晰了:在實際的使用過程中,onerror主要是來捕獲預料之外的錯誤,而try-catch則是用來在可預見情況下監控特定的錯誤,兩者結合使用更加高效。


問題又來了,捕獲不到靜態資源載入異常怎麼辦?五、window.addEventListener當一項資源(如圖片或腳本)載入失敗,載入資源的元素會觸發一個Event介面的error事件,並執行該元素上的onerror()處理函數。這些error事件不會向上冒泡到window,不過(至少在Firefox中)能被單一的window.addEventListener捕獲。



window.addEventListener('error',(error)=>{
console.log('捕獲到異常:',error);
},true)




控制台輸出:


SHAPE*MERGEFORMAT


由於網路請求異常不會事件冒泡,因此必須在捕獲階段將其捕捉到才行,但是這種方式雖然可以捕捉到網路請求的異常,但是無法判斷HTTP的狀態是404還是其他比如500等等,所以還需要配合服務端日誌才進行排查分析才可以。


需要注意:


·___煌榔饗路禱氐_rror對象可能不同,需要注意兼容處理。


·___枰⒁獗苊_ddEventListener重復監聽。六、PromiseCatch在promise中使用catch可以非常方便的捕獲到非同步error,這個很簡單。


沒有寫catch的Promise中拋出的錯誤無法被onerror或try-catch捕獲到,所以我們務必要在Promise中不要忘記寫catch處理拋出的異常。


解決方案:為了防止有漏掉的Promise異常,建議在全局增加一個對unhandledrejection的監聽,用來全局監聽UncaughtPromiseError。使用方式:


window.addEventListener("unhandledrejection",
function(e){
console.log(e);
});


我們繼續來嘗試一下:


window.addEventListener("unhandledrejection",
function(e){
e.preventDefault()
console.log('捕獲到異常:',e);
returntrue;
});
Promise.reject('promiseerror');


可以看到如下輸出:

那如果對Promise不進行catch呢?


window.addEventListener("unhandledrejection",
function(e){
e.preventDefault()
console.log('捕獲到異常:',e);
returntrue;
});
ewPromise((resolve,reject)=>{
reject('jartto:promiseerror');
});


嗯,事實證明,也是會被正常捕獲到的。


所以,正如我們上面所說,為了防止有漏掉的Promise異常,建議在全局增加一個對unhandledrejection的監聽,用來全局監聽UncaughtPromiseError。


補充一點:如果去掉控制台的異常顯示,需要加上:


event.preventDefault();七、VUEerrorHandlerVue.config.errorHandler=(err,vm,info)=>{
console.error('通過vue
errorHandler捕獲的錯誤');
console.error(err);
console.error(vm);
console.error(info);
}八、React異常捕獲React16提供了一個內置函數componentDidCatch,使用它可以非常簡單的獲取到react下的錯誤信息


componentDidCatch(error,info){
console.log(error,info);
}


除此之外,我們可以了解一下:errorboundaryUI的某部分引起的JS錯誤不應該破壞整個程序,為了幫React的使用者解決這個問題,React16介紹了一種關於錯誤邊界(errorboundary)的新觀念。


需要注意的是:errorboundaries並不會捕捉下面這些錯誤。


1.事件處理器2.非同步代碼3.服務端的渲染代碼4.在errorboundaries區域內的錯誤


我們來舉一個小例子,在下面這個componentDIdCatch(error,info)里的類會變成一個errorboundary:


.Component{
constructor(props){
super(props);
this.state={hasError:false};
}
componentDidCatch(error,info){
//DisplayfallbackUI
this.setState({hasError:true});
//
logErrorToMyService(error,info);
}
render(){
if(this.state.hasError){
//
return

Somethingwentwrong.

;
}
returnthis.props.children;
}
}


然後我們像使用普通組件那樣使用它:







componentDidCatch()方法像JS的catch{}模塊一樣工作,但是對於組件,只有class類型的組件(classcomponent)可以成為一個errorboundaries。


實際上,大多數情況下我們可以在整個程序中定義一個errorboundary組件,之後就可以一直使用它了!九、iframe異常對於iframe的異常捕獲,我們還得借力window.onerror:


window.onerror=function(message,source,lineno,colno,
error){
console.log('捕獲到異常:',{message,source,lineno,colno,error});
}


一個簡單的例子可能如下:


frameborder="0">
十、Scripterror一般情況,如果出現Scripterror這樣的錯誤,基本上可以確定是出現了跨域問題。這時候,是不會有其他太多輔助信息的,但是解決思路無非如下:


跨源資源共享機制(CORS):我們為script標簽添加crossOrigin屬性。


crossorigin>


或者動態去添加js腳本:


constscript=document.createElement('script');
script.crossOrigin='anonymous'
script.src=url;
document.body.appendChild(script);


特別注意,伺服器端需要設置:Access-Control-Allow-Origin


此外,我們也可以試試這個-解決ScriptError的另類思路:


constoriginAddEventListener=EventTarget.prototype.addEventListener;
EventTarget.prototype.addEventListener=function(type,listener,options){
constwrappedListener=function(...args){
try{
returnlistener.apply(this,args);
}
catch(err){
throwerr;
}
}
returnoriginAddEventListener.call(this,type,wrappedListener,options);
}


簡單解釋一下:


·___男戳_ventTarget的addEventListener方法;


·___源氳_istener進行包裝,返回包裝過的listener,對其執行進行try-catch;


·___榔韃換岫_ry-catch起來的異常進行跨域攔截,所以catch到的時候,是有堆棧信息的;


·___匭_hrow出來異常的時候,執行的是同域代碼,所以window.onerror捕獲的時候不會丟失堆棧信息;


利用包裝addEventListener,我們還可以達到「擴展堆棧」的效果:


(()=>{
constoriginAddEventListener=EventTarget.prototype.addEventListener;
EventTarget.prototype.addEventListener=function(type,listener,options){
+//捕獲添加事件時的堆棧
+constaddStack=newError(`Event(${type})`).stack;
constwrappedListener=function(...args){
try{
returnlistener.apply(this,args);
}
catch(err){
+//異常發生時,擴展堆棧
+err.stack+=' '+addStack;
throwerr;
}
}
returnoriginAddEventListener.call(this,type,wrappedListener,options);
}
})();十一、崩潰和卡頓卡頓也就是網頁暫時響應比較慢,JS可能無法及時執行。但崩潰就不一樣了,網頁都崩潰了,JS都不運行了,還有什麼辦法可以監控網頁的崩潰,並將網頁崩潰上報呢?


崩潰和卡頓也是不可忽視的,也許會導致你的用戶流失。


1.利用window對象的load和beforeunload事件實現了網頁崩潰的監控。不錯的文章,推薦閱讀:Logging
InformationonBrowserCrashes。window.addEventListener('load',function(){
sessionSt

E. 網路異常連接如何處理

1、網路被蹭
路由器無線網路被蹭的時候,無線連接人數多或者區域網有人進行下載,而佔用了帶寬,就會導致電腦上網速度不穩定。
排查方法:路由器後台中,「無線設置」 》》 「主機狀態」查看幾台電腦進行上網,是否有陌生設備接入無線網路。
建議:在路由器後台中設置WPA-PSK/WPA2-PSK AES加密,無線密碼建議數字+字母形式組合,盡可能復雜一些。
2、運行大流量應用
當電腦當中有大流量的應用進行下載、玩游戲或者在線視頻,此外還有一些P2P軟體會偷網,這樣救護佔用較大寬頻,最終導致電腦上網速度慢、不穩定。
建議:如果電腦或者移動設備比較多,那麼最好在無線路由器後台設置IP帶寬控制,合理為每台電腦或者設備分配帶寬。
3、病毒木馬
區域網的電腦存在病毒或者木馬,可能木馬病毒存在偷網、上傳寬頻的情況。
建議:可以嘗試通過殺毒軟體查殺電腦病毒。
4、線路問題
如果使用網線與電腦直連,經過測試有線上網速度依然不正常,和無線網路一樣存在不穩定的情況。
建議:連接寬頻服務商檢查線路問題。
5、路由器發熱
路由器發熱會影響網速!無線路由器長期不關機,尤其是夏季,出現發熱大的情況,那麼也會出現網路不穩定的現象。
建議:將路由器關機一段時間,再進行開機使用,最好將路由器放置在通風較好的地方。
6、無線干擾
①、減少距離及障礙物:
如果您的手機或者筆記本與無線路由器之間距離太遠,又或者中間需要經過牆面等障礙物,那麼就會導致無線信號衰減很大,無線網路速度不穩定的情況,所以盡量減少距離與避免障礙物。
②、降低無線干擾:
無線路由器盡可能遠離無繩電話、微波爐、手機藍牙、無線鍵盤滑鼠等無線設備干擾。
③、修改無線信道:
環境中眾多的無線信號,如果工作在相同的無線信道,會產生無線干擾導致速度不穩定。解決辦法:在路由器後台中是掃描周圍環境,在路由器上選擇周圍環境中最少的信道。

閱讀全文

與捕獲網路請求的異常處理相關的資料

熱點內容
網路共享中心沒有網卡 瀏覽:527
電腦無法檢測到網路代理 瀏覽:1376
筆記本電腦一天會用多少流量 瀏覽:593
蘋果電腦整機轉移新機 瀏覽:1380
突然無法連接工作網路 瀏覽:1075
聯通網路怎麼設置才好 瀏覽:1230
小區網路電腦怎麼連接路由器 瀏覽:1052
p1108列印機網路共享 瀏覽:1215
怎麼調節台式電腦護眼 瀏覽:715
深圳天虹蘋果電腦 瀏覽:951
網路總是異常斷開 瀏覽:617
中級配置台式電腦 瀏覽:1010
中國網路安全的戰士 瀏覽:637
同志網站在哪裡 瀏覽:1420
版觀看完整完結免費手機在線 瀏覽:1464
怎樣切換默認數據網路設置 瀏覽:1113
肯德基無線網無法訪問網路 瀏覽:1290
光纖貓怎麼連接不上網路 瀏覽:1494
神武3手游網路連接 瀏覽:969
局網列印機網路共享 瀏覽:1005