欧美网址在线观看-亚洲最新毛片-国产成人免费爽爽爽视频-亚洲一区在线影院-日韩欧美在线观看视频网站-男女激情四射-成人一区二区免费看-欧美亚洲综合在线-日韩一级视频在线播放-国产成人三级视频在线播放-亚洲中文字幕日产无码2020-99久久久国产精品免费无卡顿-av在线观看地址-果冻传媒mv免费播放在线观看-欧美在线观看视频免费-日韩天天操

聯(lián)系我們 - 廣告服務(wù) - 聯(lián)系電話:
您的當(dāng)前位置: > 關(guān)注 > > 正文

世界快消息!js基礎(chǔ)知識(shí):Promise鏈?zhǔn)秸{(diào)用

來源:CSDN 時(shí)間:2023-03-27 11:07:40

文章目錄


(資料圖片僅供參考)

1. 簡單運(yùn)用Promise2. Promise三個(gè)狀態(tài)3. Promise鏈?zhǔn)秸{(diào)用4. Promise.all5. Promise.race6. Axios——Promise封裝的Ajax7. async/await

1. 簡單運(yùn)用Promise

function sleep(time) {return new Promise(function(resolve, reject) {if(time < 1000) {setTimeout(resolve("You are success"), time);    }        else {reject("fail");        }    })}sleep(500).then(msg => {console.log(msg);}).catch(err => {console.log(err);});

控制臺(tái)查看結(jié)果:

一般在使用Promise的時(shí)候,會(huì)在定義的函數(shù)中返回一個(gè)Promise構(gòu)造函數(shù),該構(gòu)造函數(shù)包含兩個(gè)參數(shù),分別是resolve和reject。在上面的代碼中,我們調(diào)用sleep方法,傳入500。而我們使用了Promise的內(nèi)置方法then,并且向then中傳兩個(gè)參數(shù),一個(gè)是成功回調(diào)函數(shù),一個(gè)是失敗回調(diào)函數(shù)(本例中省略第二個(gè)參數(shù))。當(dāng)承諾成功兌現(xiàn),第一個(gè)回調(diào)就會(huì)被調(diào)用,而當(dāng)出現(xiàn)錯(cuò)誤的時(shí)候,就會(huì)調(diào)用第二個(gè)參數(shù)reject(此處省略)。由于500小于1000,因此會(huì)執(zhí)行setTimeout(resolve(“You are success”), time),輸出了You are success。 在上面的例子中,我們還使用了Promise中的catch方法,當(dāng)傳入的參數(shù)大于500,則會(huì)執(zhí)行catch方法,catch方法中傳遞一個(gè)參數(shù),也就是reject,因此在失敗的時(shí)候會(huì)執(zhí)行它。如下:

2. Promise三個(gè)狀態(tài)

promise對象用于作為異步任務(wù)結(jié)果的占位符,代表著一個(gè)我們暫時(shí)還沒獲得但未來有希望獲得的值。正是因?yàn)檫@個(gè)原因,js的工程師們?yōu)镻romise設(shè)置了三種狀態(tài),分別是等待態(tài)(pending),接受態(tài)(fullfilled),失敗態(tài)(rejected)。當(dāng)resolve函數(shù)被調(diào)用,promise的狀態(tài)就會(huì)變成接受態(tài);反之,如果reject方法被調(diào)用,或者在promise調(diào)用過程中發(fā)生了一個(gè)未處理的異常,則會(huì)進(jìn)入失敗態(tài)。一旦狀態(tài)改變一次,promise將不會(huì)再次改變狀態(tài)。

3. Promise鏈?zhǔn)秸{(diào)用

在本文開頭,我們提到了回調(diào)地獄,最為常見的就是使用Ajax時(shí),由于多個(gè)相互關(guān)聯(lián)的請求多層嵌套,造成語法臃腫,對于后續(xù)的維護(hù)產(chǎn)生了不好的影響。而promise的鏈?zhǔn)秸{(diào)用,一定程度上解決了這個(gè)問題。我們再回到代碼:

sleep(500).then(msg => {console.log(msg);}).catch(err => {console.log(err);});

此處使用了then方法,當(dāng)promise成功兌現(xiàn),則觸發(fā)回調(diào)函數(shù)。我們還會(huì)發(fā)現(xiàn),除了打印出You are success之外,還返回了一個(gè)Promise對象。

這就是說,每次then()都會(huì)返回一個(gè)新的promise,而這一個(gè)promise則可以交給下一個(gè)then方法使用。如下所示,每次then方法之后都返回了sleep(),而我們給出的sleep方法就是返回一個(gè)promise實(shí)例化對象,這樣不斷交給下一個(gè)then方法執(zhí)行,就是我們的鏈?zhǔn)秸{(diào)用。

sleep(500).then(msg => {console.log(msg);return sleep(500);}).then(msg => {console.log(msg);return sleep(500);}).then(msg => {console.log(msg);return sleep(500);}).then(msg => {console.log(msg);return sleep(1500);}).catch(err => {console.log(err);});

控制臺(tái)輸出:

4. Promise.all

Promise除了鏈?zhǔn)秸{(diào)用實(shí)現(xiàn)多個(gè)步驟相互依賴之外,還提供了同時(shí)等待多個(gè)異步任務(wù)的方法,這里使用Promise中的all。

Promise.all([ sleep(500), sleep(600), sleep(1500)]).then(result => {console.log(result);}).catch(err => {console.log(err);})

控制臺(tái)輸出如下:

在這個(gè)方法的使用中,我們不關(guān)系任務(wù)執(zhí)行的順序。使用的時(shí)候,我們傳入一個(gè)數(shù)組,元素則是promise對象。當(dāng)調(diào)用all的時(shí)候,會(huì)等待所有的promise對象被兌現(xiàn)之后,返回一個(gè)成功值數(shù)組。 但是,當(dāng)其中一個(gè)promise失敗,則會(huì)影響整個(gè)結(jié)果,如下所示:

5. Promise.race

當(dāng)我們只關(guān)心第一個(gè)返回結(jié)果的promise時(shí),Promise.race能幫你達(dá)成這個(gè)愿望。如同Promise.all一樣,我們在使用race的時(shí)候會(huì)傳入一個(gè)promise對象數(shù)組,,一旦該數(shù)組中的一個(gè)promise被兌現(xiàn),則返回結(jié)果。為了印證這一點(diǎn),我們改造一下sleep方法,如下:

function sleep(time) {return new Promise(function(resolve, reject) {if(time < 1000) {setTimeout(resolve(`${time}s later...`), time);    }        else {reject("fail");        }    })}Promise.race([ sleep(500), sleep(600), sleep(700)]).then(result => {console.log(result);})

控制臺(tái)輸出如下:

6. Axios——Promise封裝的Ajax

在前端開發(fā)中,異步向后端發(fā)起請求有很多中方法,jQuery的Ajax,fetch,以及axios。axios的官網(wǎng)(http://www.axios-js.com/zh-cn/docs/)上是這樣介紹的。 和jQuery的Ajax功能相似,都是對XMLHttpRequest的封裝,讓我們能夠更好地進(jìn)行異步請求。在Axios官網(wǎng)中還提到:“使用Promise管理異步,告別傳統(tǒng)callback方式”,這里說的就是Promise的鏈?zhǔn)秸{(diào)用。正是這種語法的使用,讓回調(diào)地獄問題得到了很好的解決。axios本質(zhì)上也是對原生XHR的封裝,只不過它是Promise的實(shí)現(xiàn)版本。 Axios簡單使用代碼如下:

axios.get(url)  .then(function (response) {console.log(response);  })  .catch(function (error) {console.log(error);  });

本質(zhì)上Axios的實(shí)例化對象就是一個(gè)promise,因此當(dāng)我們熟悉了promise之后再來使用axios會(huì)比較容易上手。 為了加深理解,這里使用Promise封裝一個(gè)XMLHttpRequest,模擬axios。代碼如下:

function getJSON (url) {return new Promise( (resolve, reject) => {var xhr = new XMLHttpRequest()        xhr.open("GET", url, true)        xhr.onreadystatechange = () => {if (this.readyState === 4) {if (this.status === 200) {resolve(this.responseText)                } else {var resJson = {code: this.status, response: this.response                     }                    reject(resJson, this)                }            }        }        xhr.send()    })}getJSON ("https://blog.csdn.net/").then(res => {console.log(res); }).catch(error => {console.error(error);});

非常遺憾,出現(xiàn)了跨域問題,但是沒關(guān)系,主要是通過一個(gè)實(shí)際的例子讓幫助大家更進(jìn)一步理解promise。

7. async/await

不知道大家發(fā)現(xiàn)沒有,Promise雖然一定程度上解決了回調(diào)地獄問題,但是鏈?zhǔn)秸{(diào)用的語法仍然不夠優(yōu)雅,我們?nèi)绻苡猛耆降恼Z法來解決異步問題,那該有多好。在ES6中,我們可以使用生成器和promise相結(jié)合的方式實(shí)現(xiàn)這個(gè)愿望。而JS偉大的工程師們?yōu)槲覀兲岢隽烁玫姆桨福琣sync/await,這號(hào)稱是JavaScript解決異步問題的終極解決方案,其實(shí)是對Promise的再一次封裝,也可以說是語法糖。那么它到底如何,就請聽下回分解吧!

責(zé)任編輯:

標(biāo)簽:

相關(guān)推薦:

精彩放送:

新聞聚焦
Top 欧美网址在线观看-亚洲最新毛片-国产成人免费爽爽爽视频-亚洲一区在线影院-日韩欧美在线观看视频网站-男女激情四射-成人一区二区免费看-欧美亚洲综合在线-日韩一级视频在线播放-国产成人三级视频在线播放-亚洲中文字幕日产无码2020-99久久久国产精品免费无卡顿-av在线观看地址-果冻传媒mv免费播放在线观看-欧美在线观看视频免费-日韩天天操

        亚洲天堂伊人网| 网站一区二区三区| 善良的小姨在线| www精品久久| 在线观看免费视频高清游戏推荐| 日本福利视频一区| 欧美亚洲另类色图| 久热免费在线观看| 黄频视频在线观看| 国产综合中文字幕| www激情五月| 国产91xxx| 爱豆国产剧免费观看大全剧苏畅 | 中文字幕无码精品亚洲35| 黄色aaa级片| 久久成人免费观看| 中文字幕55页| 青青草久久伊人| 国产l精品国产亚洲区久久| 老司机久久精品| 国产美女三级视频| 小泽玛利亚av在线| 杨幂毛片午夜性生毛片| 日本福利视频一区| 成人在线免费观看网址| 污网站免费在线| 特级丰满少妇一级| 亚洲精品第三页| 爱爱爱爱免费视频| 少妇熟女一区二区| 亚洲最新免费视频| 黄网站色视频免费观看| 四虎4hu永久免费入口| 国产精品美女在线播放| 九九久久九九久久| 蜜臀精品一区二区| 国产第一页视频| 污片在线免费看| 大桥未久一区二区三区| 99久久免费观看| 黑人糟蹋人妻hd中文字幕| 久草在在线视频| 日韩第一页在线观看| 人妻熟妇乱又伦精品视频| 亚洲 中文字幕 日韩 无码| 五月天激情播播| 日本在线xxx| 少妇熟女一区二区| 男人天堂网视频| 狠狠精品干练久久久无码中文字幕| 久久久久99精品成人片| 色综合天天色综合| 丁香六月激情婷婷| 视频在线观看免费高清| 免费国产黄色网址| 亚洲黄色网址在线观看| 日韩国产欧美亚洲| 精品视频在线观看一区二区| 日本熟妇人妻中出| 成人性生活视频免费看| 精品无码av无码免费专区| 无码日韩人妻精品久久蜜桃| 国产v片免费观看| 四虎影院一区二区| 午夜免费看视频| 99久re热视频精品98| 永久免费黄色片| 亚洲激情在线观看视频| mm1313亚洲国产精品无码试看| 强开小嫩苞一区二区三区网站| 国产美女18xxxx免费视频| 看欧美ab黄色大片视频免费| 国产精品99久久免费黑人人妻| 成人污网站在线观看| 欧美 日韩 国产 高清| 99爱视频在线| 在线免费观看视频黄| www.com操| 人妻激情另类乱人伦人妻| 成人在线观看你懂的| 久久久噜噜噜www成人网| 日本黄色福利视频| 黄色成人在线免费观看| 久草综合在线观看| 影音先锋成人资源网站| 国产 欧美 日本| 极品粉嫩国产18尤物| 男女视频一区二区三区| 日本美女久久久| 日本a在线天堂| 亚洲最大综合网| 肉大捧一出免费观看网站在线播放 | 成人免费在线视频播放| 精品视频一区二区在线| 99视频在线观看视频| 日av中文字幕| 久色视频在线播放| 少妇久久久久久被弄到高潮| 欧美一级特黄a| 欧美视频在线观看网站| 午夜国产福利在线观看| 国产成人精品视频免费看| 日本久久久网站| 黄色免费高清视频| 黄色永久免费网站| 污版视频在线观看| 激情网站五月天| 在线观看高清免费视频| 欧美一级视频在线播放| 激情五月六月婷婷| 欧美午夜小视频| 浮妇高潮喷白浆视频| 日韩精品xxxx| 18禁男女爽爽爽午夜网站免费| 国产日韩成人内射视频| 日日摸天天爽天天爽视频| 凹凸国产熟女精品视频| 91人人澡人人爽人人精品| 亚洲这里只有精品| 久久久久久av无码免费网站下载| 国产xxxxhd| 欧美日韩在线中文| 丝袜制服一区二区三区| 国产探花在线观看视频| 黄色一级片在线看| 女人高潮一级片| 免费看一级大黄情大片| 免费黄频在线观看| 91成人在线观看喷潮教学| 中文字幕国内自拍| 日韩少妇内射免费播放18禁裸乳| 国产精彩免费视频| 粉色视频免费看| 日韩欧美中文在线视频| 免费在线激情视频| 国产二级片在线观看| 2021国产视频| 日韩中文字幕a| 别急慢慢来1978如如2| 久久人人爽人人爽人人av| 天天干天天草天天| av污在线观看| 日韩大片一区二区| 国产又大又硬又粗| 黄色a级片免费| 日韩一级理论片| 在线观看国产一级片| 天天色综合天天色| 日本人视频jizz页码69| 日本在线视频www| 中国黄色片免费看| 国产精品自在自线| 国产精品一区二区小说| 国产福利一区视频| 日韩一级免费在线观看| 日本在线视频www| 亚洲娇小娇小娇小| 国内av免费观看| 国产九九九九九| 在线观看av网页| 亚洲精品少妇一区二区| 女性隐私黄www网站视频| 色www免费视频| 国产天堂视频在线观看| 男人插女人下面免费视频| 樱花草www在线| 丰满人妻中伦妇伦精品app| 一本之道在线视频| 国产精品久久久久9999小说| 少妇一晚三次一区二区三区| 韩国中文字幕av| 久久综合九色综合88i| 又色又爽又黄视频| 久久久久久久久久网| 亚洲国产精品女人| 在线免费av播放| 亚洲一级免费在线观看| 久草青青在线观看| 亚洲熟妇av一区二区三区漫画| 久久久成人精品一区二区三区| 国产一区亚洲二区三区| 拔插拔插海外华人免费| 一级日本黄色片| 国产成人免费高清视频| 秋霞在线一区二区| 91看片淫黄大片91| 佐佐木明希av| 免费特级黄色片| 黄色www网站| 天天爽天天爽夜夜爽| 噼里啪啦国语在线观看免费版高清版| 日本久久久精品视频| 无码人妻丰满熟妇区毛片18| 热久久精品免费视频| 欧美日韩怡红院| www.com久久久| 18禁网站免费无遮挡无码中文| 美女日批免费视频| 国产一级特黄a大片免费| 少妇一级淫免费播放|