最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

說一說JS實現(xiàn)異步的方法?

2022-05-27 17:34 作者:朵寶特工007  | 我要投稿

得分點:回調(diào)函數(shù)、事件監(jiān)聽、setTimeout、Promise、生成器Generators/yield、async/awt。

回答:所有的異步任務(wù)都是在同步執(zhí)行結(jié)束之后,從任務(wù)隊列中依次取出執(zhí)行。

(1)回調(diào)函數(shù)是異步操作最基本的方法,比如AJAX回調(diào),回調(diào)函數(shù)的優(yōu)點是簡單、容易理解和實現(xiàn),缺點是不利于代碼的閱讀和維護,各個部分之間高度耦合,使得程序結(jié)構(gòu)混亂、流程難以追蹤(尤其是多個回調(diào)函數(shù)嵌套的情況),而且每個任務(wù)只能指定一個回調(diào)函數(shù)。此外它不能使用try catch捕獲錯誤,不能之間return。

(2)Promise包裝了一個異步調(diào)用并生成一個Promise實例,當(dāng)異步調(diào)用返回的時候根據(jù)調(diào)用的結(jié)果分別調(diào)用實例化時傳入的resolve和reject方法,then接收到對應(yīng)的數(shù)據(jù),做出相應(yīng)的處理。Promise不僅能夠捕獲錯誤,而且也能很好地解決了回調(diào)地獄的問題,缺點是無法取消Promise,錯誤需要通過回調(diào)函數(shù)捕獲。

(3)Generator函數(shù)是ES6提供的一種異步編程解決方案,Generator函數(shù)是一個狀態(tài)機,封裝了多個內(nèi)部狀態(tài),可暫停函數(shù),yield可暫停,next方法可啟動,每次返回的是yield后的表達式結(jié)果。優(yōu)點是異步語義清晰,缺點是手動迭代Generator函數(shù)很麻煩,實現(xiàn)邏輯優(yōu)點繞。

(4)async/awt是于Promise實現(xiàn)的,async/awt使得異步代碼看起來像同步代碼,所以優(yōu)點是使用方法清晰明了,缺點是awt將異步代碼改造成了同步代碼,如果多個異步代碼沒有依賴性卻使用了awt會導(dǎo)致性能上的降低,代碼沒有依賴性的話,完全可以使用Promise.all的方式。

加分回答:JS異步編程進化史:callback -> promise -> generator/yield -> async/awt。

async/awt函數(shù)對Generator函數(shù)的改進,體現(xiàn)在以下三點:

(1)內(nèi)置執(zhí)行器。Generator函數(shù)的執(zhí)行必須靠執(zhí)行器,而async函數(shù)自帶執(zhí)行器。也就是說,async函數(shù)的執(zhí)行,與普通函數(shù)一模一樣,只要一行。

(2)更廣的適用性。yield命令后面只能是Thunk函數(shù)或者Promise對象,而async函數(shù)的awt命令后面,可以跟Promise對象和原始類型的值(數(shù)值、字符串和布爾值,但這時等同于同步操作)。

(3)更好的語義。async和awt,比起星號和yield,語義更清楚了。async表示函數(shù)里有異步操作,awt表示緊跟在后面表達式需要等待結(jié)果。目前使用很廣泛的就是promise和async/awt。

說一說JS實現(xiàn)異步的方法?的評論 (共 條)

分享到微博請遵守國家法律
乐业县| 华坪县| 大兴区| 仁化县| 兴宁市| 贡嘎县| 乾安县| 中阳县| 寻甸| 永和县| 紫云| 马龙县| 吉安县| 山西省| 天柱县| 萍乡市| 招远市| 宁晋县| 遂宁市| 德保县| 临泽县| 沅陵县| 五原县| 钟山县| 双辽市| 库车县| 宁陵县| 五峰| 麻城市| 葵青区| 兰考县| 屯门区| 佛学| 余江县| 马尔康县| 林西县| 鹿邑县| 咸阳市| 东城区| 沛县| 福州市|