<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
穩定性建設之JavaScript程式碼不能被阻斷
js程式碼可能會因為某些原因,導致出錯,進而整個後續程式碼有可能都被阻斷。直接影響線上的穩定性
console.log(111) // 預期 a = {} // 結果 a = undefined a.a = 1 console.log(222) // js程式碼不能執行到這一行
這個程式碼很明顯會報錯,在a.a = 1
這一行開始報錯,後續的js程式碼被阻斷了,console.log(222)
列印不出來
console.log(111) try { // 預期 a = {} // 結果 a = undefined a.a = 1 } catch (e) { console.error(e) } console.log(222) // js程式碼可以執行到這一行
try { // 預期 a = {} // 結果 a = undefined a.a = 1 } catch (e) { console.error(e) // 公司內部的上報函數 someReportFunction('sendEvent', { name: 'try_catch_error', params: { errorMsg: e.message, errorStack: e.stack }, }); }
隨便點開一篇文章,就有人在誤人子弟,教別人用 throw, throw這個東西是不能亂用的,因為他會阻斷程式碼,重要的事情說三遍,throw會阻斷程式碼,throw會阻斷程式碼,throw會阻斷程式碼
例如:
console.log(111) try { // 預期 a = {} // 結果 a = undefined a.a = 1 } catch (e) { console.error(e) throw e // throw會阻斷程式碼,導致下面不執行 } console.log(222) // 不能執行到這一行
當然throw也不是一無是處,但是,他只能在try{ 裡面使用 },不能在try之外的地方使用throw,包括catch
console.log(111) try { throw new Error(111) } catch (e) { console.error(e) } console.log(222)
function getData () { if (...) { ... } else { throw new Error(111) } } console.log(111) try { getData() } catch (e) { console.error(e) } console.log(222)
console.log(111111111) try { setTimeout(() => { a = undefined a.a = 1 // 程式碼被阻斷於此 console.log('error') // 不能執行到這一行 }, 0) } catch (e) { console.error(e) // 非同步程式碼catch不到 } console.log(222222222) setTimeout(() => { console.log('setTimeout') // 瀏覽器可以執行到這一行,node的不行(node14和16版本都test了) }, 2000)
// a.js console.log(111111111) try { require('./b.js') } catch (e) { console.log('error') // 錯誤會被正常catch到 console.error(e) } console.log(222222222) setTimeout(() => { console.log('setTimeout') }, 2000) // b.js console.log(1) a = undefined a.a = 1 console.log(2) // 結果列印 (require被正常捕獲) 111111111 1 error TypeError: Cannot set property 'a' of undefined ... ... 222222222 setTimeout
// a.js console.log(111111111) try { import('./b.js') } catch (e) { console.log('error') // 錯誤沒有被catch到 console.error(e) } console.log(222222222) setTimeout(() => { console.log('setTimeout') }, 2000) // b.js console.log(1) a = undefined a.a = 1 console.log(2) // 結果列印 (import的 錯誤沒有被catch到) 111111111 222222222 1 (node:92673) UnhandledPromiseRejectionWarning: TypeError: Cannot set property 'a' of undefined ... setTimeout
正確捕獲import()的方式:其實import()是一個promise,用promise的方法去catch就好了
import('./b.js') .catch(e => { console.log('error') console.error(e) })
結論:
背景:
以上就是JavaScript程式碼不能被阻斷的穩定性建設的詳細內容,更多關於JavaScript穩定建設的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45