日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

异步错误处理 -- 时机

發布時間:2025/4/16 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 异步错误处理 -- 时机 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、編寫JavaScript代碼時,我們要時刻牢記,JavaScript引擎是一個事件驅動的執行引擎,代碼總是以單線程執行,

  而回調函數的執行需要等到下一個滿足條件的事件出現后,才會被執行。

  例如,setTimeout()函數可以傳入回調函數,并在指定若干毫秒后執行:

function printTime() {console.log('It is time!'); }setTimeout(printTime, 1000); console.log('done');// 上面的代碼會先打印done,1秒后才會打印It is time!。

2、如果printTime()函數內部發生了錯誤,我們試圖用try包裹setTimeout()是無效的

function printTime() {throw new Error(); }try {setTimeout(printTime, 1000);console.log('done'); } catch (e) {console.log('error'); }//不會捕捉到異常,JS引擎報錯
//
VM3520:5 Uncaught Error at printTime (eval at <anonymous> (extension.js?v=1.0-b1b83dc-2019-05-25T01:51:58Z:61), <anonymous>:5:11)

  原因就在于調用setTimeout()函數時,傳入的printTime函數并未立刻執行!

  緊接著,JavaScript引擎會繼續執行console.log('done');語句,而此時并沒有錯誤發生。

  直到1秒鐘后,執行printTime函數時才發生錯誤,但此時除了在printTime函數內部捕獲錯誤外,外層代碼并無法捕獲。

  所以,涉及到異步代碼,無法在調用時捕獲,原因就是在捕獲的當時,回調函數并未執行。

3、類似的,當我們處理一個事件時,在綁定事件的代碼處,無法捕獲事件處理函數的錯誤。

<form><input id="x"> + <input id="y"><button id="calc" type="button">計算</button> </form>try {$btn.click(function () {varx = parseFloat($('#x').val()),y = parseFloat($('#y').val()),r;if (isNaN(x) || isNaN(y)) {throw new Error('輸入有誤');}r = x + y;alert('計算結果:' + r);}); } catch (e) {alert('輸入有誤!'); }
//
VM3523:16 Uncaught Error: 輸入有誤
// at HTMLButtonElement.eval (eval at <anonymous> (extension.js?v=1.0-b1b83dc-2019-05-25T01:51:58Z:61), <anonymous>:16:19)
// at HTMLButtonElement.dispatch (jquery.js:3)
// at HTMLButtonElement.r.handle (jquery.js:3)

修改代碼如下:

$btn.click(function () {try {varx = parseFloat($('#x').val()),y = parseFloat($('#y').val()),r;if (isNaN(x) || isNaN(y)) {throw new Error('輸入有誤');}r = x + y;alert('計算結果:' + r);} catch (e) {alert('輸入有誤!');}});

?

轉自:https://www.liaoxuefeng.com/wiki/1022910821149312/1120880431288064

轉載于:https://www.cnblogs.com/slightFly/p/11576971.html

總結

以上是生活随笔為你收集整理的异步错误处理 -- 时机的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。