1.不處理直接導致程式奔潰,這顯然不是我們想要的node.js中常用的異常處理方式2.導致請求無法被釋放,直至連線超時。使用者體驗體驗非常差,我們要做的應該是在出錯時,給使用者乙個友好的提示,並記錄下此次異常,以便排查。
// 每秒鐘列印一次時間,確保程式沒有奔潰
(function
loop()
,1000)}
)()// 模擬同步**塊內出現異常
letsyncerror=(
)=>
// 模擬非同步**塊內出現異常
letasyncerror=(
)=>
,100
)}
try
catch(e
)console.
log(
'異常**獲了,我可以繼續執行'
)
但是try catch方式無法處理非同步**塊內出現的異常,你可以理解為執行catch時,異常還沒有發生。
try
catch(e
)
fs.
mkdir
('/dir'
,function
(e)else
})
let events =
require
("events");
//建立乙個事件監聽物件
let emitter =
newevents.eventemitter()
;//監聽error事件
emitter.
addlistener
("error"
,function
(e))
;//觸發error事件
emitter.
emit
("error"
,new
error
('出錯啦'))
;
new
promise
((resolve, reject)
=>
catch(e)
*/})
.then((
)=>).
catch
((e)
=>
)
promise同樣無法處理非同步**塊中丟擲的異常
new
promise
((resolve, reject)
=>).
then((
)=>).
catch
((e)
=>
)
async/await是基於promise的,所以promise無法捕獲的異常,async/await同樣無法捕獲
var
sleep
=function
(time))}
;(async
function()
catch(e
)})(
)
process方式可以捕獲任何異常(不管是同步**塊中的異常還是非同步**塊中的異常)
process.on(
'uncaughtexception'
,function
(e))
;asyncerror()
syncerror
()
process方式雖然可以捕獲任何型別的異常,但是process太過笨重,除了記錄下錯誤資訊,其他地方不適合使用,domain這個也可以處理任何型別異常的模組,顯然是乙個不錯的選擇。
let domain =
require
('domain'
)let d = domain.
create()
d.on
('error'
,function
(e))
d.run
(asyncerror)
d.run
(syncerror)
MySql錯誤處理 錯誤處理的例子
有幾種錯誤處理的宣告形式 如果任何錯誤 不是 not found 設定 l error 為 1 後繼續執行 declare continue handler for sqlexception set l error 1 如果發生任何錯誤 不是 not found 執行 rollback和產生一條錯誤...
MySql錯誤處理(三) 錯誤處理的例子
mysql錯誤處理 三 錯誤處理的例子 有幾種錯誤處理的宣告形式 如果任何錯誤 不是 not found 設定 l error 為 1 後繼續執行 declare continue handler for sqlexception set l error 1 如果發生任何錯誤 不是 not foun...
PHP 錯誤處理
在 php 中,預設的錯誤處理很簡單。一條訊息會被傳送到瀏覽器,這條訊息帶有檔名 行號以及一條描述錯誤的訊息。在建立指令碼和 web 應用程式時,錯誤處理是乙個重要的部分。如果您的 缺少錯誤檢測編碼,那麼程式看上去很不專業,也為安全風險敞開了大門。本教程介紹了 php 中一些最為重要的錯誤檢測方法。...