成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院203nnxyz-美女毛片在线看-美女免费黄

站長資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

es6回調(diào)地獄是什么

在es6中,回調(diào)地獄就是多層回調(diào)函數(shù)相互嵌套,即回調(diào)函數(shù)中嵌套回調(diào)函數(shù)的情況;它是為了實現(xiàn)代碼順序執(zhí)行而出現(xiàn)的一種操作,它會造成我們的代碼可讀性非常差,后期不好維護。es6中使用promise來解決回調(diào)地獄的問題。

es6回調(diào)地獄是什么

本教程操作環(huán)境:windows7系統(tǒng)、ECMAScript 6版、Dell G3電腦。

前言

在正式了解“回調(diào)地獄”之前,我們先了解兩個概念:

1、回調(diào)函數(shù)

當一個函數(shù)作為參數(shù)傳入另一個參數(shù)中,并且它不會立即執(zhí)行,只有當滿足一定條件后該函數(shù)才可以執(zhí)行,這種函數(shù)就稱為回調(diào)函數(shù)。我們熟悉的定時器和Ajax中就存在有回調(diào)函數(shù):

setTimeout(function(){   //function(){console.log('執(zhí)行了回調(diào)函數(shù)')}就是回調(diào)函數(shù),它只有在3秒后才會執(zhí)行 	console.log('執(zhí)行了回調(diào)函數(shù)'); },3000)  //3000毫秒
登錄后復(fù)制

這里的回調(diào)函數(shù)是function(){console.log('執(zhí)行了回調(diào)函數(shù)')},在滿足時間3秒后執(zhí)行。

//1.創(chuàng)建異步對象 			var xhr=new XMLHttpRequest();       //2.綁定監(jiān)聽事件(接收請求) 			xhr.onreadystatechange=function(){ 				//此方法會被調(diào)用4次 				//最后一次,readyState==4 				//并且響應(yīng)狀態(tài)碼為200時,才是我們要的響應(yīng)結(jié)果 xhr.status==200 				if(xhr.readyState==4 && xhr.status==200){ 					//把響應(yīng)數(shù)據(jù)存儲到變量result中 					var result=xhr.responseText; 					console.log(result); 				} 			}       //3.打開鏈接(創(chuàng)建請求) 			xhr.open("get","/demo/ajaxDemo",true);       //4.發(fā)送請求 			xhr.send();
登錄后復(fù)制

這里的回調(diào)函數(shù)是xhr.onreadystatechange綁定的函數(shù),在xhr.send()發(fā)送請求并拿到響應(yīng)后執(zhí)行。

2、異步任務(wù)

與之相對應(yīng)的概念是“同步任務(wù)”,同步任務(wù)在主線程上排隊執(zhí)行,只有前一個任務(wù)執(zhí)行完畢,才能執(zhí)行下一個任務(wù)。異步任務(wù)不進入主線程,而是進入異步隊列,前一個任務(wù)是否執(zhí)行完畢不影響下一個任務(wù)的執(zhí)行。同樣,還拿定時器作為異步任務(wù)舉例:

setTimeout(function(){     console.log('執(zhí)行了回調(diào)函數(shù)'); },3000) console.log('111');
登錄后復(fù)制

如果按照代碼編寫的順序,應(yīng)該先輸出“執(zhí)行了回調(diào)函數(shù)”,再輸出“111”。但實際輸出為:
es6回調(diào)地獄是什么
這種不阻塞后面任務(wù)執(zhí)行的任務(wù)就叫做異步任務(wù)。

接下來讓我們看看什么是回調(diào)地獄。

一、回調(diào)地獄是什么?

根據(jù)前面我們可以得出一個結(jié)論:存在異步任務(wù)的代碼,不能保證能按照順序執(zhí)行,那如果我們非要代碼順序執(zhí)行呢?

比如我要說一句話,語序必須是下面這樣的:武林要以和為貴,要講武德,不要搞窩里斗。
我必須要這樣操作,才能保證順序正確:

        setTimeout(function () {  //第一層             console.log('武林要以和為貴');             setTimeout(function () {  //第二程                 console.log('要講武德');                 setTimeout(function () {   //第三層                     console.log('不要搞窩里斗');                 }, 1000)             }, 2000)         }, 3000)
登錄后復(fù)制

es6回調(diào)地獄是什么

可以看到,代碼中的回調(diào)函數(shù)套回調(diào)函數(shù),居然套了3層,這種回調(diào)函數(shù)中嵌套回調(diào)函數(shù)的情況就叫做回調(diào)地獄。

總結(jié)一下,回調(diào)地獄就是為是實現(xiàn)代碼順序執(zhí)行而出現(xiàn)的一種操作,它會造成我們的代碼可讀性非常差,后期不好維護。

那該如何解決回調(diào)地獄呢?

二、如何解決回調(diào)地獄

1.Promise

Promise是js中的一個原生對象,是一種異步編程的解決方案,可以替換掉傳統(tǒng)的回調(diào)函數(shù)解決方案。

  • Promise構(gòu)造函數(shù)接收一個函數(shù)作為參數(shù),我們需要處理的異步任務(wù)就卸載該函數(shù)體內(nèi),該函數(shù)的兩個參數(shù)是resolve,reject。異步任務(wù)執(zhí)行成功時調(diào)用resolve函數(shù)返回結(jié)果,反之調(diào)用reject。

  • Promise對象的then方法用來接收處理成功時響應(yīng)的數(shù)據(jù),catch方法用來接收處理失敗時相應(yīng)的數(shù)據(jù)。

  • Promise的鏈式編程可以保證代碼的執(zhí)行順序,前提是每一次在than做完處理后,一定要return一個Promise對象,這樣才能在下一次then時接收到數(shù)據(jù)。

下面是實例代碼:

        function fn(str){             var p=new Promise(function(resolve,reject){                 //處理異步任務(wù)                 var flag=true;                 setTimeout(function(){                     if(flag){                         resolve(str)                     }                     else{                         reject('操作失敗')                     }                 })             })             return p;         }          fn('武林要以和為貴')         .then((data)=>{             console.log(data);             return fn('要講武德');         })         .then((data)=>{             console.log(data);             return fn('不要搞窩里斗')         })         .then((data)=>{             console.log(data);         })         .catch((data)=>{             console.log(data);         })
登錄后復(fù)制

es6回調(diào)地獄是什么
但是Promise最大的問題就是代碼冗余,原來的異步任務(wù)被Promise封裝一下,不管什么操作都用than,就會導(dǎo)致一眼看過去全是then…then…then…,這樣也是不利于代碼維護的。

所以下面的async/await 可以時代碼看起來更像同步代碼。

2.async/await

首先我們看async關(guān)鍵字,他作為一個關(guān)鍵字放到聲明函數(shù)前面,表示該函數(shù)為一個異步任務(wù),不會阻塞后面函數(shù)的執(zhí)行:

        async function fn(){             return '不講武德';         }         console.log(fn());
登錄后復(fù)制

es6回調(diào)地獄是什么
可以看到async函數(shù)返回數(shù)據(jù)時自動封裝為一個Promise對象。

和Promise對象一樣,處理異步任務(wù)時也可以按照成功和失敗來返回不同的數(shù)據(jù),處理成功時用then方法來接收,失敗時用catch方法來接收數(shù)據(jù):

        async function fn() {             var flag = true;             if (flag) {                 return '不講武德';             }             else{                 throw '處理失敗'             }         }         fn()         .then(data=>{             console.log(data);         })         .catch(data=>{             console.log(data);         })          console.log('先執(zhí)行我,表明async聲明的函數(shù)是異步的');
登錄后復(fù)制

es6回調(diào)地獄是什么
當把flag設(shè)置為false是,執(zhí)行結(jié)果為:
es6回調(diào)地獄是什么
async關(guān)鍵字說完了,我們看看awai關(guān)鍵字

  • await關(guān)鍵字只能在使用async定義的函數(shù)中使用
  • await后面可以直接跟一個 Promise實例對象(可以跟任何表達式,
贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
欧美成人精品激情在线观看| 欧美性爱群交视频| 女教师的凌脣教室在线| 人妻[21P]大胆| 肉丝超薄少妇一区二区三区| 无码专区亚洲综合另类| 亚洲国产精品久久久久婷婷老年 | 欧美交换配乱吟粗大和黄| 日本入室强伦姧BD在线观看| 无码人妻AⅤ一区二区三区| 亚洲精品成人A在线观看| 最新的美国ZOOM动物| 宝贝把腿张开我要添你下边动态图| 父母儿女一家换着玩的文案| 国内精品国语自产拍在线观看| 久久无码AV中文出轨人妻| 欧美VIDEOS另类极品| 熟妇高潮一区二区三区| 亚洲AV中文无码乱人伦在线r▽| 再深点灬舒服灬太大了添A| 被黑人猛躁10次高潮视频| 国产女人精品视频国产灰线| 久久婷婷五月综合色精品| 日本高清XXXXXXXXXX| 亚洲AV无码成人YELLOW| 18禁强伦姧人妻又大又粗| 国产99在线 | 亚洲| 九九爱WWW免费人成视频| 青青青国产成人久久111网站| 唔嗯啊欧美一级作爱网站| 一区二区三区在线 | 欧| 成人AV在线网址| 极品AV麻豆国产在线观看| 欧美人成人精品视频在线观看| 婷婷5月女内射AV| 幼儿稀缺区超清幼儿做的网站| 东京热加勒比无码视频| 久久AV喷吹AV高潮AV欧美| 日本丰满的人妻HD高清在线| 亚洲加勒比无码一区二区| 边做边爱边吃奶叫床的动态图| 国内精品久久久久影院一蜜桃| 欧美黑人性爱视频| 亚洲AV无码成人片在线观看一区| 99国产精品永久免费视频| 国产午夜福利内射青草| 欧美视频一区二区三区| 亚洲AV无码专区亚洲AV桃花桃 | 人妻体内射精一区二区| 亚洲精品卡一卡2卡3卡4卡 | 精品无人区麻豆乱码1区2 | 女人丝不挂的正面裸体| 亚洲AV噜噜在线成人网站女同| 3D动漫精品啪啪一区二区中 | 亚洲欧美性爱视频| 动漫精品中文无码卡通动漫| 巨熟乳波霸若妻在线播放| 我的真實亂倫故事| 999ZYZ玖玖资源站在线观看| 好儿子你插得太深了| 日本熟妇厨房XXXXX乱| 一边捏奶头一边高潮视频| 国产精品久久久久久久久免费蜜桃| 女人被狂躁的高潮免费视频| 亚洲第一无码AV无码专区| 丁香五月缴情网站| 老太太BGMBGMBGM11| 亚洲AV成人精品日韩一区| 边喂奶边中出的人妻| 噜噜私人影片在线看片| 亚洲AV成人网人人蜜臀| 不充钱看全部超污视频| 毛耸耸性XXXX毛耸耸| 亚洲AV无码一区二区二三区我 | 2021影音先锋AⅤ资源男人网| 狠狠做五月深爱婷婷天天综合| 色综合伊人色综合网站无码| 97久久国产亚洲精品超碰热 | 亚洲熟妇AV一区二区三区| 熟妇五十路六十路息与子| 在线黄色网站观看汙| 国产午夜无码精品免费看动漫| 日韩人妻无码精品无码中文字幕| 中国 韩国 日本 免费看片| 激情综合色五月丁香六月欧美| 天码AV高清毛片在线看_| GOGO人体GOGO西西大尺度| 老师你的好软水好多的时候图片| 亚洲AV无码一区二区三区波多野| 高潮奶水涨喷在线播放| 人人爽人人爽人人爽人人片AV| 又色又爽的无遮挡免费网址| 激情综合婷婷丁香五月情| 无码人妻巨屁股系列大又挺拔| 吃了继兄开的药我做的梦更| 欧美人与性动交a欧美精品| 雨后小故事完整版| 久久久AV波多野一区二区| 亚洲AV无码一区二区三区观看| 国产精品边做奶水狂喷无码 | 亚洲精品无码久久久久Y| 国产免费午夜福利蜜芽无码 | 人妻 色综合网站| 18禁全彩肉肉无遮挡| 老头的大龟挺进秀婷小说| 亚洲一区二区女搞男| 精品AV综合一区二区三区| 亚洲AV无码专区亚洲AV紧身裤| 国产美女视频国产视视频 | CF穿越火线女去衣看奶| 男人J进女人P免费视频在线直播| 又小又紧女MAGNET| 久久久久精品电影一区二区三区| 亚洲老熟女 @ TUBEUM| 黑人巨鞭大战丰满少妇| 亚洲AV综合AV一区二区三区| 国产亚洲日韩一区二区三区| 西西人体大胆4444WWW| 国产免费AV一区二区三区| 性欧美ⅩXX1819内谢| 国产新婚夫妇叫床声不断| 性色AV性色生活片| 国产午夜视频在线观看| 亚洲AⅤ中文无码字幕色下载软件| 国产女人被躁到高潮的AV| 小蜜桃HD中字高清在线| 国产一区二区女内射| 亚洲AV无码成人网站久久精品大| 国产亚AV手机在线观看| 亚洲AV无码一区二区三区在线播| 好爽…又高潮了粉色视频| 亚洲免费福利视频| 久久久久亚洲AV无码成人片麻豆 | 美女下部裸体张开腿视频| 377P欧洲日本亚洲大胆| 亲近相奷对白中文字幕| 成人妇女免费播放久久久| 色偷偷WWW8888| 国产护士在线视频XXXX免费| 无码午夜福利视频一区| 激情射精爆插热吻无码视频| 亚洲人成无码网站18禁10| 久久人妻AV中文字幕| 2020国产精品久久久久精品| 青青青国产手线观看视频2019 | 99久久精品国产波多野结衣 | 免费一本色道久久一区| Z0OZO0人善之交另类| 少妇又色又紧又爽又刺激视频| 国产精品视频一区国模私拍| 亚洲AV中文AⅤ无码AV不卡| 久久久久精品国产三级| 99久久99久久免费精品蜜桃| 日韩欧美亚洲综合久久影院DS | 妺妺窝人体色WWW网| 被粗大噗嗤噗嗤进出灌满浓浆| 双腿吊起揉捏花蒂| 国内揄拍国内精品少妇| 幼儿HIPHOP仙踪林的功能| 全棵女性艺术写真素材| 国产激情一区二区三区小说| 亚洲国产精品久久久久久无码| 老熟女太熟了95AV| 班主任掀开裙子让我桶的| 我的好妈妈中文字幕| 九九久久精品无码专区| 99久在线国内在线播放免费观看| 少妇高潮太爽了在线观看欧美| 韩国精品一区二区无码视频 | 好男人HD免费观看| 中文字幕亚洲人妻| 日韩一区在线视频| 国产区精品福利在线社区| 一区国产情侣宾馆射| 日本熟妇人妻XXXXX-欢迎您| 国产小便视频在线播放| 中国熟妇内谢69XXXXX| 色婷婷五月综合亚洲影院| 韩国av一区二区| AV 无码 在线 观看| 无码无套少妇毛多18PXXXX| 毛片无码中文字幕| 国产AV一区二区三区日韩| 亚洲熟妇真实自拍另类| 日本久久久久亚洲中字幕| 狠狠色噜噜狠狠狠狠7777米奇| AV最新高清无码专区| 亚洲ⅤA中文字幕无码| 男女作爱全部免费观爱| 国产精品久久久久久无毒不卡| 伊人久久大香线蕉AⅤ色| 上司侵犯下属人妻中文字幕| 精品无码久久久久成人漫画| YY111111少妇无码理论片| 亚洲AV羞羞无码高潮喷水好爽| 欧美日韩亚洲中文字幕一区二区三| 国产微拍精品一区二区| 97婷婷狠狠成为人免费视频| 亚洲 欧美 综合 另类 中字| 欧美又粗又大BBBB疯视频AV|