Ⅰ js文件中無故報錯,不知道什麼原因,還會有部分的亂碼錯誤。
下載一篇文檔,不管用何種軟體打開,發現如下圖的樣子,全是亂碼,那麼第一可能 的原因就是,此文檔本身就是損壞的,所以才會無法正常顯示,出現這種情況,你最好要驗證一下此文檔的可靠性,或者再重新下載一遍再打開。
注意事項
文檔成亂碼的原因有很多,當然不局限於以上的幾種情況,還有許多復雜的情況,比如有些人為了偽裝一些文檔,會將一些文檔的格式改為其他不正確的格式,這時我們打開此文檔時,系統會默認其為修改後的格式,當然打開後會是亂碼了。
文件的格式多種多樣,如果某一個文件可能並不是一個文字文檔文件,那麼你當文檔打開當然會是亂碼,比如一個系統文件的格式,如dll文件,你可能會誤認為此文件是一篇文檔文件,用記事本打開,就會顯示亂碼。所以要對文檔的格式辨別清楚。
如果用一種閱讀文件打不開這個文檔,你可以多試幾個軟體,不要因為怕麻煩而放棄,因為畢竟常用的文檔格式就那麼幾種,你可以挨個軟體測試,或者將文檔的格式手動給修改,然後再打開,也是可能正確打開的。
如果是一些系統自帶的字體,那種一般需要恢復系統或者重裝系統才能找回這種字體,因為有些字體在網路上下載的話很難辨別,對應下載的成功率不大,所以出現這樣的情況最好重新安裝一下系統或者嘗試恢復。
Ⅱ 無網路連接,錯誤代碼:ERR_INTERNET_DISCONNECTED怎麼解決
解決辦法如下:
1、如果是寬頻本身的問題,首先直接聯接寬頻網線測試,如果是寬頻的問題,聯系寬頻客服解決。
2、如果是路由器的問題,如果原來可以用,暫時不能用了,我自己的實踐是一個是斷掉路由器的電源在插上,等會看看。在有就是恢復出廠設置,從新嚴格按說明書設置就可以用了,自己不懂,不建議自己隨意設置(這是在物理連接正確的前提下,有時是路由器尋IP地址慢或失敗引起的,並不是說路由器壞了)。
如果總是不能解決,建議給路由器的客服打電話,他們有電話在線指導,我遇到自己不能解決的問題,咨詢他們給的建議是很有用的,他們會針對你的設置或操作給出正確建議的。
3、如果關閉了無線開關開啟就是了,如果是用軟體連接的無線,軟體不好用又經常出問題是很正常的,沒有更好的方法,用路由器吧。另外就是網卡驅動沒有或不合適引起的,網線介面或網線是不是有問題等。
4、如果是系統問題引起的,建議還原系統或重裝。
Ⅲ 電腦彈出JavaScript警告「無法獲取修改密碼強度信息,網路異常」,校園網就上不去了,怎麼辦
可能是修改密碼後延遲問題 建議先用網頁登錄, 大概 半天的時間在用客戶端登陸 客戶端的密碼同時也要修改
Ⅳ javascript:;網頁上有錯誤。怎麼修好
1.你到 www.360.cn 下載並安裝360安全衛士2.打開360安全衛士,點擊360安全衛士面板上的高級按鈕就會看到修復IE這個標簽3.在修復IE這個標簽左下角點擊「全選」,然後點擊「立即修復」,很快就會完成修復工資4.重新打開瀏覽器看看還有沒有出現你說的問題,如果還是老樣子的話建議安裝卡巴斯基KIS2009殺毒或者重新安裝系統 一、網路設置的問題 這種原因比較多出現在需要手動指定IP、網關、DNS伺服器聯網方式下,及使用代理伺服器上網的。仔細檢 查計算機的網路設置。 二、DNS伺服器的問題 當IE無法瀏覽網頁時,可先嘗試用IP地址來訪問,如用 www.sohu.com 的61.135.150.126,如果可 以訪問,那麼應該是DNS的問題,造成DNS的問題可能是連網時獲取DNS出錯或DNS伺服器本身問題,這 時你可以手動指定DNS服務,也可以用其它地方可正常使用DNS伺服器地址。在網路的屬性里進行,(控制面 板—網路和拔號連接—本地連接—右鍵屬性—TCP/IP協議—屬性—使用下面的DNS伺服器地址)。不同的ISP 有不同的DNS地址。 還有一種可能,是本地DNS緩存出現了問題,會導致網站無法訪問。可以在「運行」中執行ipconfig /flushdns來重建本地DNS緩存。 三、IE瀏覽器本身的問題 當IE瀏覽器本身出現故障時,或者IE被惡意修改破壞也會導致無法瀏覽網頁。這時可以 嘗試用「window優化大師」,360安全衛士,超級兔子來修復(建議到安全模式下修復),或者重新下載並重裝IE。 四、網路防火牆的問題 如果網路防火牆設置不當,如安全等級過高、不小心把IE放進了阻止訪問列表、錯誤的防火牆策略等, 可嘗試檢查策略、降低防火牆安全等級、設置例外網站或直接關掉試試是否恢復正常 五、網卡驅動損壞或者網卡接觸不良的問題 更新網卡驅動和重新插拔網卡,擦掉污物。 六、HOSTS文件的問題 HOSTS文件被修改,也會導致瀏覽的不正常,解決方法當然是清空HOSTS文件里的內容。 七、系統文件的問題 當與IE有關的系統文件被更換或損壞時,會影響到IE正常的使用,這時可使用SFC命令修復一下,WIN 98系統可在「運行」中執行SFC,然後執行掃描;WIN2000/XP/2003則在「運行」中執行sfc /scannow嘗試修復。 其中當只有IE無法瀏覽網頁,而QQ可以上時,則往往由於winsock.dll、wsock32.dll或wsock.vxd(VXD 只在WIN9X系統下存在)等文件損壞或丟失造成,Winsock是構成TCP/IP協議的重要組成部分,一般要重裝T CP/IP協議。xp可以使用 netsh 命令重置 TC P/IP協議,使其恢復到初次安裝操作系統時的狀態。具體操作如下: 點擊「開始 運行」,在運行對話框中輸入「CMD」命令,彈出命令提示符窗口,接著輸入「netsh int ip reset c:\resetlog.txt」命令後會回車即可,其中「resetlog.txt」文件是用來記錄命令執行結果的日誌文件,該參數選項必須 指定,這里指定的日誌文件的完整路徑是「c:\resetlog.txt」。執行此命令後的結果與刪除並重新安裝 TCP/IP 協議 的效果相同。 第二個解決方法是修復以上文件,WIN9X使用SFC重新提取以上文件,WIN2000/XP/2003使用sfc /sc annow命令修復文件,當用sfc /scannow無法修復時,可試試網上發布的專門針對這個問題的修復工具WinSock Fix。 八、殺毒軟體的實時監控問題 這倒不是經常見,但有時很致命,你們你不去懷疑它,但有可能問題就是它。 因為現在殺毒軟體的實時監控都添加了對網頁內容的監控。 舉一個實例:KV2005就會在個別的機子上會導致IE無法瀏覽網頁,卡巴斯基的網頁監控功能特別是http通信的監控功能 也會造成許多網站的不能正常瀏覽,需要刷新多次。因為系統環境的不同、安裝的應用軟體的不同,造成殺毒軟體的這種症狀。 但如果出現IE無法瀏覽網頁時,值得注意檢查一下殺毒軟體的監控,關了監控你覺得不安全的話就用好的防火牆或者其他助手類軟體 搭配殺毒軟體使用。 我的電腦就是安裝的卡巴斯基,好幾個月的時間,用了很多辦法都不能解決上網必刷新的難題,直到有一次我偶爾關閉了卡巴的 網頁監控就正常了。現在我上網一直都是關閉卡巴的web反病毒保護裡面的http協議監控,只保留監控瀏覽器。 九、Application Management服務的問題 出現只能上QQ不能開網頁的情況,重新啟動後就好了。不過就算重新啟動,開7到8個網頁後又不能開 網頁了,只能上QQ。有時電信網通網路運營商往往會讓你禁用Application Management服務,就能解決了。 十、感染了病毒所致 這種情況往往表現在打開IE時,在IE界面的左下框里提示:正在打開網頁,但老半天沒響應。在任務管理 器里查看進程,(進入方法,把滑鼠放在任務欄上,按右鍵—任務管理器—進程)看看CPU的佔用率如何,如果 是100%,可以肯定,是感染了病毒 升級並用殺毒軟體全面掃描,用查殺木馬軟體全面掃描。不能解決就要手動解決.首先查查是哪個進程貪婪地佔 用了CPU資源.找到後,最好把名稱記錄下來,然後點擊結束,如果不能結束,則要啟動到安全模式下把該東 東刪除,還要進入注冊表裡,(方法:開始—運行,輸入regedit)在注冊表對話框里,點編輯—查找,輸入那個程 序名,找到後,點滑鼠右鍵刪除,然後再進行幾次的搜索,往往能徹底刪除干凈。 還是不行,就把那個可疑進程和出現的症狀發到網上論壇上尋求幫助。 十一、能打開網站的首頁,但不能打開二級鏈接 如果是這樣,處理的方法是重新注冊如下的DLL文件: 在開始—運行里輸入: regsvr32 Shdocvw.dll regsvr32 Shell32.dll (注意這個命令,先不用輸) regsvr32 Oleaut32.dll regsvr32 Actxprxy.dll regsvr32 Mshtml.dll regsvr32 Urlmon.dll regsvr32 Msjava.dll regsvr32 Browseui.dll 注意:每輸入一條,按回車。第二個命令可以先不用輸,輸完這些命令後重新啟動windows,如果發現無 效,再重新輸入一遍,這次輸入第二個命令。 十二、清除上網產生的臨時文件,清除緩存,清除cookies。 十三、是否使用代理伺服器.瀏覽器的代理規則是否被改動?
Ⅳ jquery或者js如何判斷當前網路是否暢通,我的頁面是給手機用的
代碼邏輯如下:
jQuery.ajax({
url:"",
dataType:"",
type:"",
success:function(data){
//...調用成功代碼
},
error:function(XMLHttpRequest,textStatus,errorThrown){
alert(XMLHttpRequest.status);//查看請求狀態
//調用失敗代碼
}
});
通過ajax的error參數判斷當前網路狀況。
Ⅵ js css 網路引進報403錯誤 同樣的環境配置 代碼 別人電腦上和線上就可以運行
導致403錯誤的主要原因
1、你的IP被列入黑名單。
2、你在一定時間內過多地訪問此網站(一般是用採集程序),被防火牆拒絕訪問了。
3、網站域名解析到了空間,但空間未綁定此域名。
4、你的網頁腳本文件在當前目錄下沒有執行許可權。
5、在不允許寫/創建文件的目錄中執行了創建/寫文件操作。
6、以http方式訪問需要ssl連接的網址。
7、瀏覽器不支持SSL128時訪問SSL128的連接。
8、在身份驗證的過程中輸入了錯誤的密碼。
9、DNS解析錯誤,手動更改DNS伺服器地址。
10、連接的用戶過多,可以過後再試。
11、伺服器繁忙,同一IP地址發送請求過多,遭到伺服器智能屏蔽。
Ⅶ 該網頁無法訪問 ( 錯誤代碼:連接錯誤 )什麼原因
、首先點擊「開始」菜單,打開「運行」。
2、輸入regsvr32 jscript.dll後選擇「確定」。
出現提示後,點擊確定。
3、再次輸入regsvr32 vbscript.dll選擇「確定」。
再一次出現提示後,確定。
4、經過以上兩次成功提示,說明已成功修復IE組件,將瀏覽器的過濾等功能關閉後,清除一下瀏覽器的緩存(工具->Internet選項->刪除Cookies),點瀏覽器上的工具——然後再選擇最下面的Internet選項,再點Internet刪除文件(記得勾上刪除所有離線內容),確定後,然後再重新打開瀏覽器嘗試。
如果這樣修復仍然顯示有錯誤,可能性比較大的是網頁本身的問題。也就是服務端的問題。如今很多的網站頁面的代碼都是套用一些模板,而原模板的所有js(javascript)腳本可能又沒有被完全用到。加之設計者的水平或是疏忽等問題。導致在頁面上找不到js對象。就會顯示出網頁有問題的現象。
Ⅷ JavaScript警告1.1.1.3無法獲取修改密碼強度信息,網路異常。怎麼處理
內網升級改造的問題,屬於系統原因,需要聯系內網總機處理。
Ⅸ 每次打開某些網站都出現這個:Network Error (tcp_error) 怎麼解決
一般就是你的網路設置出了問題,逐個排查,協議,ip地址,網路屬性。正確的設置可以參考朋友的
1:把自設的IP改為自動獲取
會自動生成ip,不用操作
2:請設對你到電信局安裝網線時的賬號與密碼
賬號密碼在當初上網的時候運營商都會給你的,可以打客服問
3:裝對網卡驅動
重新買一個網卡驅動,安裝重啟
4:確定電腦集成或外置網卡能用
5:不行就打電話叫電信的工作人員來幫你看看
Ⅹ javascript中非同步操作的異常怎麼處理
一、JavaScript非同步編程的兩個核心難點
非同步I/O、事件驅動使得單線程的JavaScript得以在不阻塞UI的情況下執行網路、文件訪問功能,且使之在後端實現了較高的性能。然而非同步風格也引來了一些麻煩,其中比較核心的問題是:
1、函數嵌套過深
JavaScript的非同步調用基於回調函數,當多個非同步事務多級依賴時,回調函數會形成多級的嵌套,代碼變成
金字塔型結構。這不僅使得代碼變難看難懂,更使得調試、重構的過程充滿風險。
2、異常處理
回調嵌套不僅僅是使代碼變得雜亂,也使得錯誤處理更復雜。這里主要講講異常處理。
二、異常處理
像很多時髦的語言一樣,JavaScript 也允許拋出異常,隨後再用一個try/catch
語句塊捕獲。如果拋出的異常未被捕獲,大多數JavaScript環境都會提供一個有用的堆棧軌跡。舉個例子,下面這段代碼由於'{'為無效JSON
對象而拋出異常。
?
12345678
function JSONToObject(jsonStr) { return JSON.parse(jsonStr);}var obj = JSONToObject('{');//SyntaxError: Unexpected end of input//at Object.parse (native)//at JSONToObject (/AsyncJS/stackTrace.js:2:15)//at Object.<anonymous> (/AsyncJS/stackTrace.js:4:11)
堆棧軌跡不僅告訴我們哪裡拋出了錯誤,而且說明了最初出錯的地方:第4 行代碼。遺憾的是,自頂向下地跟蹤非同步錯誤起源並不都這么直截了當。
非同步編程中可能拋出錯誤的情況有兩種:回調函數錯誤、非同步函數錯誤。
1、回調函數錯誤
如果從非同步回調中拋出錯誤,會發生什麼事?讓我們先來做個測試。
?
1234567
setTimeout(function A() { setTimeout(function B() { setTimeout(function C() { throw new Error('Something terrible has happened!'); }, 0); }, 0);}, 0);
上述應用的結果是一條極其簡短的堆棧軌跡。
?
12
Error: Something terrible has happened!at Timer.C (/AsyncJS/nestedErrors.js:4:13)
等等,A 和B 發生了什麼事?為什麼它們沒有出現在堆棧軌跡中?這是因為運行C 的時候,非同步函數的上下文已經不存在了,A 和B 並不在內存堆棧里。這3
個函數都是從事件隊列直接運行的。基於同樣的理由,利用try/catch
語句塊並不能捕獲從非同步回調中拋出的錯誤。另外回調函數中的return也失去了意義。
?
1234567
try { setTimeout(function() { throw new Error('Catch me if you can!'); }, 0);} catch (e) {console.error(e);}
看到這里的問題了嗎?這里的try/catch 語句塊只捕獲setTimeout函數自身內部發生的那些錯誤。因為setTimeout
非同步地運行其回調,所以即使延時設置為0,回調拋出的錯誤也會直接流向應用程序。
總的來說,取用非同步回調的函數即使包裝上try/catch 語句塊,也只是無用之舉。(特例是,該非同步函數確實是在同步地做某些事且容易出錯。例如,Node
的fs.watch(file,callback)就是這樣一個函數,它在目標文件不存在時會拋出一個錯誤。)正因為此,Node.js
中的回調幾乎總是接受一個錯誤作為其首個參數,這樣就允許回調自己來決定如何處理這個錯誤。
2、非同步函數錯誤
由於非同步函數是立刻返回的,非同步事務中發生的錯誤是無法通過try-catch來捕捉的,只能採用由調用方提供錯誤處理回調的方案來解決。
例如Node中常見的function (err, ...)
{...}回調函數,就是Node中處理錯誤的約定:即將錯誤作為回調函數的第一個實參返回。再比如HTML5中FileReader對象的onerror函數,會被用於處理非同步讀取文件過程中的錯誤。
舉個例子,下面這個Node 應用嘗試非同步地讀取一個文件,還負責記錄下任何錯誤(如「文件不存在」)。
?
1234567
var fs = require('fs'); fs.readFile('fhgwgdz.txt', function(err, data) { if (err) { return console.error(err); }; console.log(data.toString('utf8'));});
客戶端JavaScript 庫的一致性要稍微差些,不過最常見的模式是,針對成敗這兩種情形各規定一個單獨的回調。jQuery 的Ajax
方法就遵循了這個模式。
?
1234
$.get('/data', { success: successHandler, failure: failureHandler});
不管API 形態像什麼,始終要記住的是,只能在回調內部處理源於回調的非同步錯誤。
三、未捕獲異常的處理
如果是從回調中拋出異常的,則由那個調用了回調的人負責捕獲該異常。但如果異常從未被捕獲,又會怎麼樣?這時,不同的JavaScript環境有著不同的游戲規則……
1. 在瀏覽器環境中
現代瀏覽器會在開發人員控制台顯示那些未捕獲的異常,接著返回事件隊列。要想修改這種行為,可以給window.onerror
附加一個處理器。如果windows.onerror 處理器返回true,則能阻止瀏覽器的默認錯誤處理行為。
?
123
window.onerror = function(err) { return true; //徹底忽略所有錯誤};
在成品應用中, 會考慮某種JavaScript 錯誤處理服務, 譬如Errorception。Errorception
提供了一個現成的windows.onerror 處理器,它向應用伺服器報告所有未捕獲的異常,接著應用伺服器發送消息通知我們。
2. 在Node.js 環境中
在Node 環境中,window.onerror 的類似物就是process 對象的uncaughtException 事件。正常情況下,Node
應用會因未捕獲的異常而立即退出。但只要至少還有一個uncaughtException 事件處理
器,Node 應用就會直接返回事件隊列。
?
123
process.on('uncaughtException', function(err) { console.error(err); //避免了關停的命運!});
但是,自Node 0.8.4 起,uncaughtException 事件就被廢棄了。據其文檔所言,對異常處理而言,uncaughtException
是一種非常粗暴的機制,請勿使用uncaughtException,而應使用Domain 對象。
Domain 對象又是什麼?你可能會這樣問。Domain 對象是事件化對象,它將throw 轉化為'error'事件。下面是一個例子。
?
123456789
var myDomain = require('domain').create();myDomain.run(function() { setTimeout(function() { throw new Error('Listen to me!') }, 50);});myDomain.on('error', function(err) { console.log('Error ignored!');});
源於延時事件的throw 只是簡單地觸發了Domain 對象的錯誤處理器。
Error ignored!
很奇妙,是不是?Domain 對象讓throw
語句生動了很多。不管在瀏覽器端還是伺服器端,全局的異常處理器都應被視作最後一根救命稻草。請僅在調試時才使用它。
四、幾種解決方案
下面對幾種解決方案的討論主要集中於上面提到的兩個核心問題上,當然也會考慮其他方面的因素來評判其優缺點。
1、Async.js
首先是Node中非常著名的Async.js,這個庫能夠在Node中展露頭角,恐怕也得歸功於Node統一的錯誤處理約定。
而在前端,一開始並沒有形成這么統一的約定,因此使用Async.js的話可能需要對現有的庫進行封裝。
Async.js的其實就是給回調函數的幾種常見使用模式加了一層包裝。比如我們需要三個前後依賴的非同步操作,採用純回調函數寫法如下:
?
12345678910111213141516
asyncOpA(a, b, (err, result) => { if (err) { handleErrorA(err); } asyncOpB(c, result, (err, result) => { if (err) { handleErrorB(err); } asyncOpB(d, result, (err, result) => { if (err) { handlerErrorC(err); } finalOp(result); }); });});
如果我們採用async庫來做:
?async.waterfall([ (cb) => { asyncOpA(a, b, (err, result) => { cb(err, c, result); }); }, (c, lastResult, cb) => { asyncOpB(c, lastResult, (err, result) => { cb(err, d, result); }) }, (d, lastResult, cb) => { asyncOpC(d, lastResult, (err, result) => { cb(err, result); }); }], (err, finalResult) => { if (err) { handlerError(err); } finalOp(finalResult);});
可以看到,回調函數由原來的橫向發展轉變為縱向發展,同時錯誤被統一傳遞到最後的處理函數中。
其原理是,將函數數組中的後一個函數包裝後作為前一個函數的末參數cb傳入,同時要求:
每一個函數都應當執行其cb參數;cb的第一個參數用來傳遞錯誤。我們可以自己寫一個async.waterfall的實現:
?let async = { waterfall: (methods, finalCb = _emptyFunction) => { if (!_isArray(methods)) { return finalCb(new Error('First argument to waterfall must be an array of functions')); } if (!methods.length) { return finalCb(); } function wrap(n) { if (n === methods.length) { return finalCb; } return function (err, ...args) { if (err) { return finalCb(err); } methods[n](...args, wrap(n + 1)); } } wrap(0)(false); }};
Async.js還有series/parallel/whilst等多種流程式控制制方法,來實現常見的非同步協作。
Async.js的問題:
在外在上依然沒有擺脫回調函數,只是將其從橫向發展變為縱向,還是需要程序員熟練非同步回調風格。
錯誤處理上仍然沒有利用上try-catch和throw,依賴於「回調函數的第一個參數用來傳遞錯誤」這樣的一個約定。
2、Promise方案
ES6的Promise來源於Promise/A+。使用Promise來進行非同步流程式控制制,有幾個需要注意的問題,
把前面提到的功能用Promise來實現,需要先包裝非同步函數,使之能返回一個Promise:
?
12345678910
function toPromiseStyle(fn) { return (...args) => { return new Promise((resolve, reject) => { fn(...args, (err, result) => { if (err) reject(err); resolve(result); }) }); };}
這個函數可以把符合下述規則的非同步函數轉換為返回Promise的函數:
回調函數的第一個參數用於傳遞錯誤,第二個參數用於傳遞正常的結果。接著就可以進行操作了:
?
123456789101112131415
let [opA, opB, opC] = [asyncOpA, asyncOpB, asyncOpC].map((fn) => toPromiseStyle(fn)); opA(a, b) .then((res) => { return opB(c, res); }) .then((res) => { return opC(d, res); }) .then((res) => { return finalOp(res); }) .catch((err) => { handleError(err); });
通過Promise,原來明顯的非同步回調函數風格顯得更像同步編程風格,我們只需要使用then方法將結果傳遞下去即可,同時return也有了相應的意義:
在每一個then的onFullfilled函數(以及onRejected)里的return,都會為下一個then的onFullfilled函數(以及onRejected)的參數設定好值。
如此一來,return、try-catch/throw都可以使用了,但catch是以方法的形式出現,還是不盡如人意。
3、Generator方案
ES6引入的Generator可以理解為可在運行中轉移控制權給其他代碼,並在需要的時候返回繼續執行的函數。利用Generator可以實現協程的功能。
將Generator與Promise結合,可以進一步將非同步代碼轉化為同步風格:
?
1234567891011
function* getResult() { let res, a, b, c, d; try { res = yield opA(a, b); res = yield opB(c, res); res = yield opC(d); return res; } catch (err) { return handleError(err); }}
然而我們還需要一個可以自動運行Generator的函數:
?
2324252627282930
function spawn(genF, ...args) { return new Promise((resolve, reject) => { let gen = genF(...args); function next(fn) { try { let r = fn(); if (r.done) { resolve(r.value); } Promise.resolve(r.value) .then((v) => { next(() => { return gen.next(v); }); }).catch((err) => { next(() => { return gen.throw(err); }) }); } catch (err) { reject(err); } } next(() => { return gen.next(undefined); }); });}
用這個函數來調用Generator即可:
?
1234567
spawn(getResult) .then((res) => { finalOp(res); }) .catch((err) => { handleFinalOpError(err); });
可見try-catch和return實際上已經以其原本面貌回到了代碼中,在代碼形式上也已經看不到非同步風格的痕跡。
類似的功能有co/task.js等庫實現。
4、ES7的async/await
ES7中將會引入async function和await關鍵字,利用這個功能,我們可以輕松寫出同步風格的代碼,
同時依然可以利用原有的非同步I/O機制。
採用async function,我們可以將之前的代碼寫成這樣:
?
12345678910111213
async function getResult() { let res, a, b, c, d; try { res = await opA(a, b); res = await opB(c, res); res = await opC(d); return res; } catch (err) { return handleError(err); }} getResult();
和Generator & Promise方案看起來沒有太大區別,只是關鍵字換了換。
實際上async
function就是對Generator方案的一個官方認可,將之作為語言內置功能。
async function的缺點:
await只能在async function內部使用,因此一旦你寫了幾個async function,或者使用了依賴於async
function的庫,那你很可能會需要更多的async function。
目前處於提案階段的async
function還沒有得到任何瀏覽器或Node.JS/io.js的支持。Babel轉碼器也需要打開實驗選項,並且對於不支持Generator的瀏覽器來說,還需要引進一層厚厚的regenerator
runtime,想在前端生產環境得到應用還需要時間。
以上就是本文的全部內容,希望對大家的學習有所幫助。