精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

寫(xiě)給 Java 程序員的前端 Promise 教程

開(kāi)發(fā) 前端
小伙伴們知道,松哥最近在錄 TienChin 項(xiàng)目,用的 RuoYi-Vue 腳手架,前端關(guān)于網(wǎng)絡(luò)請(qǐng)求的地方,很多都涉及到了 Promise,為了讓小伙伴們能更好的理解前端代碼,咱們抽空整一篇文章和大家聊聊整個(gè) Promise。

1. 為什么需要 Promise

假設(shè)我現(xiàn)在有這樣一個(gè)需求,用戶先去登錄,登錄成功之后,再去服務(wù)端獲取用戶信息,獲取到用戶信息之后再去服務(wù)端獲取前端的動(dòng)態(tài)菜單。一般我們的 Ajax 請(qǐng)求都是異步形式,為了確保上一步操作成功再執(zhí)行下一個(gè)請(qǐng)求,所以最終發(fā)出的請(qǐng)求偽代碼類似下面這樣:

$.ajax({    url:'/login',    data:loginForm,    success: function (data) {        //登錄成功        $.ajax({            url:'/getInfo',            success: function (userInfo) {                //獲取用戶信息成功                $.ajax({                    url: '/getMenus',                    success: function (menus) {                        //獲取菜單成功                    }                })            }        })    }})

為了確保一個(gè)異步任務(wù)執(zhí)行完成后,再執(zhí)行下一個(gè)異步任務(wù),我們不得不在回調(diào)函數(shù)中不停的寫(xiě)下去,上面我舉的例子是三個(gè)請(qǐng)求嵌套,實(shí)際上可能會(huì)更多。。。這就是前端所謂的回調(diào)地獄。而 Promise 就是來(lái)解決回調(diào)地獄的。

2. Promise

Promise 從字面上理解,就是承諾,承諾將來(lái)在某一個(gè)時(shí)間會(huì)做某一件事。通過(guò) Promise 我們可以將異步任務(wù)執(zhí)行的代碼和處理的代碼完全分離開(kāi)。

還是第一小節(jié)這個(gè)例子,如果我們用 Promise 寫(xiě),那么方式如下:

function login(resolve, reject) {    setTimeout(() => {        let number = Math.random();        if (number > 0.5) {            resolve("login success")        } else {            reject("login failed")        }    }, 2000);}function getInfo(resolve, reject) {    setTimeout(() => {        let number = Math.random();        if (number > 0.5) {            resolve("getInfo success")        } else {            reject("getInfo failed")        }    }, 2000);}function getMenus(resolve, reject) {    setTimeout(() => {        let number = Math.random();        if (number > 0.5) {            resolve("getMenus success")        } else {            reject("getMenus failed")        }    }, 2000);}new Promise(login).then(data => {    console.log("login:", data);    return new Promise(getInfo);}).then(data => {    console.log("getInfo:", data);    return new Promise(getMenus);}).then(data => {    console.log("getMenus", data);}).catch(err => {    console.log("err:", err);})

我們?cè)?Promise 中寫(xiě)異步任務(wù)執(zhí)行的代碼,在上面的案例中,松哥通過(guò) setTImeout 方法模擬了一個(gè)耗時(shí)操作,異步任務(wù)執(zhí)行完畢后,我們調(diào)用 resolve 方法返回調(diào)用的結(jié)果(會(huì)進(jìn)入到下一步的 then 中),也可以調(diào)用 reject 方法表示調(diào)用失?。〞?huì)進(jìn)入到 catch 中)。

3. then

then 中的返回值可以分為三種情況。

3.1 正常 return

then 中方法的參數(shù),是上一個(gè) Promise 對(duì)象 resolve 的值,一個(gè) Promise 對(duì)象可以有多個(gè) then,例如上面案例的登錄功能,我們可以一直 then 下去:

function login(resolve, reject) {    setTimeout(() => {        let number = Math.random();        if (number > 0.5) {            resolve("login success")        } else {            reject("login failed")        }    }, 2000);}new Promise(login).then(data => {    console.log("then1:", data);    return data;}).then(data => {    console.log("then2:", data);    return data;}).then(data => {    console.log("then3:", data);}).catch(err => {    console.log("err:", err);})

這樣可以一直返回,這有點(diǎn)像我們 Java 中的流式編程。

3.2 拋出異常

在 then 中,我們可以對(duì)返回結(jié)果進(jìn)行判斷,不滿足條件也可以直接拋出異常,這樣就會(huì)進(jìn)入到最近的 catch 代碼塊中。如下案例:

function login(resolve, reject) {    setTimeout(() => {        let number = Math.random();        if (number > 0.5) {            resolve("login success")        } else {            reject("login failed")        }    }, 2000);}new Promise(login).then(data => {    console.log("then1:", data);    throw new Error("出錯(cuò)啦");}).then(data => {    console.log("then2:", data);    return data;}).then(data => {    console.log("then3:", data);}).catch(err => {    console.log("err:", err);})

像上面這段代碼,如果進(jìn)入到第一個(gè) then 中,第一個(gè) then 直接拋出異常,這樣直接就進(jìn)入到 catch 中了,后面的 then 就都不會(huì)執(zhí)行了。

3.3 返回 Promise

第三種情況就是 then 中也可以返回一個(gè) Promise 對(duì)象,這個(gè)就如同我們第二小節(jié)的案例,我這里就不再贅述了。

就說(shuō)一句,如果 then 中返回的是一個(gè) Promise 對(duì)象,那么接下來(lái)的 then 其實(shí)是這個(gè) Promise 對(duì)象的 then,而不是一開(kāi)始的 Promise 的 then 了。例如如下偽代碼:

A.then((data)=>{return B}).then(xxx)

假設(shè) A 和 B 都是 Promise 對(duì)象,那么第二個(gè) then 方法是 B 的 then。

好啦,這就是 then 中的三種返回值情況。

4. catch

catch 主要是用來(lái)處理異常的情況,兩種情況下會(huì)進(jìn)入到 catch 中:

  • Promise 執(zhí)行的時(shí)候通過(guò) reject 返回?cái)?shù)據(jù)。
  • then 中拋出 Error

出了問(wèn)題,就由最近的 catch 來(lái)處理。

5. finally

最后還有一個(gè) finally 用來(lái)兜底,這一套下來(lái)感覺(jué)有點(diǎn)像我們 Java 中的 try-catch-finally,也就是前面無(wú)論如何,最終 finally 中的代碼都會(huì)執(zhí)行。不過(guò)不同于 Java 中的 finally,Promise 中的 finally 在最終執(zhí)行完畢后,還可以繼續(xù) then。。。前端的蜜汁操作。

6. 其他方法

最后,我們?cè)賮?lái)看看 Promise 中的其他靜態(tài)方法。

6.1 Promise.all()

Promise.all() 方法可以接收多個(gè) Promise 對(duì)象,并且只返回一個(gè) Promise 實(shí)例,這個(gè)方法會(huì)等所有輸入的 Promise 對(duì)象的 resolve 方法都返回的時(shí)候,或者所有輸入的 Promise 對(duì)象中有一個(gè) reject 的時(shí)候,這個(gè) all 就會(huì)執(zhí)行結(jié)束,來(lái)看如下一個(gè)案例:

const promise1 = Promise.resolve(3);const promise2 = 42;const promise3 = new Promise((resolve, reject) => {    setTimeout(resolve, 3000, 'foo');});Promise.all([promise1, promise2, promise3]).then((values) => {    console.log(values);}).catch(err=>{    console.log("err", err);})

當(dāng) promise1、promise2 以及 promise3 都執(zhí)行了 resolve 的時(shí)候,就會(huì)進(jìn)入到 then 中,這三個(gè)中有任意一個(gè)執(zhí)行了 reject 就會(huì)進(jìn)入到 catch 中。

6.2 Promise.race()

Promise.race() 方法可以接收多個(gè) Promise 對(duì)象,一旦迭代器中的某個(gè) Promise resolve 或 reject,返回的 Promise 就會(huì) resolve 或 reject。

和 all 方法的區(qū)別在于,race 方法是誰(shuí)執(zhí)行的快,就用誰(shuí)的結(jié)果。我們來(lái)看如下一段代碼:

const promise1 = new Promise((resolve, reject) => {    setTimeout(resolve, 500, 'one');});const promise2 = new Promise((resolve, reject) => {    setTimeout(reject, 600, 'two');});Promise.race([promise1, promise2]).then((value) => {    console.log(value);});

promise1 執(zhí)行時(shí)間短,promise2 執(zhí)行時(shí)間長(zhǎng),所以最終結(jié)果就是 promise1 的結(jié)果。

6.3 Promise.reject()

Promise.reject() 方法返回一個(gè)帶有 reject 原因的 Promise 對(duì)象。來(lái)看如下一段代碼:

function resolved(result) {    console.log('Resolved');}function rejected(result) {    console.error(result);}Promise.reject("error").then(resolved).catch(rejected);

這個(gè)執(zhí)行的時(shí)候就會(huì)進(jìn)入到 catch 中。

6.4 Promise.resolve()

Promise.resolve(value) 方法返回一個(gè)以給定值解析后的 Promise 對(duì)象。

const promise1 = Promise.resolve(3);promise1.then(data=>{    console.log("data", data);},err=>{    console.log("err", err);})

這個(gè)用法比較簡(jiǎn)單,沒(méi)啥好說(shuō)的。?

責(zé)任編輯:華軒 來(lái)源: 今日頭條
相關(guān)推薦

2022-08-08 10:45:49

PromiseJava腳手架

2019-01-04 12:46:03

程序員技能溝通

2010-12-30 10:04:49

Linux入門(mén)

2016-01-05 10:30:59

后端程序員緩存原理

2019-09-27 14:33:34

2015-08-14 13:51:22

程序員

2020-07-13 08:08:05

程序員軟考原理

2015-06-11 13:12:56

2013-08-20 09:33:59

程序員

2012-11-08 09:49:30

C++Java程序員

2014-08-13 10:38:01

2015-11-04 10:30:06

前端文藝范程序員

2015-11-03 15:17:28

前端程序員特色

2015-12-04 09:33:15

程序員前端演進(jìn)史

2014-07-29 10:30:16

JavaJava程序員

2009-02-19 11:02:17

2012-11-02 13:47:31

Java程序員編程

2011-05-13 14:34:02

程序員

2018-11-01 15:20:17

前端程序員編程語(yǔ)言

2024-05-06 00:00:00

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

日韩不卡中文字幕| 亚洲成人自拍一区| 91丨九色丨国产在线| 中文字幕av免费在线观看| 免费看久久久| 欧美性大战久久久久久久蜜臀| 中文字幕一区二区三区5566| 精品人妻少妇嫩草av无码专区| 亚洲欧美日韩国产| 久久精品国产成人| av在线网站观看| 国产一区二区| 色婷婷综合久久久久中文| 婷婷视频在线播放| 日本电影一区二区在线观看| 国产真实乱偷精品视频免| 国外成人免费在线播放| 精品日韩在线视频| 日日狠狠久久偷偷综合色| 欧美日本精品一区二区三区| 亚洲 欧美 日韩 国产综合 在线| porn视频在线观看| 99久久99久久精品免费观看| 国产日韩欧美另类| 欧美videossex极品| 欧美黄色大片网站| 国产亚洲精品久久久久久777 | 青草国产精品久久久久久| 九九精品在线观看| 成人免费视频入口| 亚洲欧洲色图| 亚洲国产成人精品久久| 99中文字幕在线| 91成人在线| 欧美日韩免费网站| 国产美女在线一区| av网站导航在线观看免费| 国产日韩欧美一区二区三区综合| 国产午夜精品在线| 亚洲AV无码国产精品午夜字幕 | 国产精品成人99一区无码| 欧美韩国日本| 在线观看av一区| 青青青在线播放| 国产高清视频色在线www| 亚洲激情五月婷婷| 中文字幕第50页| 国产一二区在线观看| 国产精品美日韩| 免费久久一级欧美特大黄| 蜜桃av噜噜一区二区三区麻豆 | 黑人巨大精品欧美| 第四色在线一区二区| 欧美成人乱码一区二区三区| 五月天婷婷影视| 国产精品久一| 欧美一区二区在线不卡| 色噜噜狠狠一区二区| 欧美日韩卡一| 69堂国产成人免费视频| 五月天国产视频| 老司机亚洲精品一区二区| 91精品国产品国语在线不卡| 日韩欧美中文在线视频| 亚洲视频国产精品| 亚洲大尺度美女在线| 国产麻豆xxxvideo实拍| 亚洲最好看的视频| 国产亚洲精品美女| 一区二区视频免费看| 欧美精品成人| 91爱视频在线| 成年人视频免费| 捆绑调教一区二区三区| 91在线观看免费网站| 精品人妻少妇嫩草av无码专区| 成人av先锋影音| 久久久久久久久一区| 成人在线免费观看| 自拍视频在线观看一区二区| 国产黄色激情视频| gay欧美网站| 欧美午夜一区二区| 九色91porny| 欧美一区 二区| 中国人与牲禽动交精品| 欧美黑人猛猛猛| 一本综合久久| 国产剧情日韩欧美| 精品免费久久久| 97超碰欧美中文字幕| 亚洲精品一区二区毛豆| 亚洲丝袜一区| 一道本成人在线| 精品久久久99| 秋霞影院一区二区三区| 色黄久久久久久| 久久久久黄色片| 视频一区视频二区中文| 92看片淫黄大片看国产片| 天堂中文在线资| 亚洲欧美一区二区在线观看| 少妇人妻无码专区视频| www.欧美| 亚洲欧美日韩精品| 久草免费新视频| 日韩有码一区二区三区| 国产精品国产一区二区 | 久久影院资源网| 精品人妻无码一区二区性色| 国内精品写真在线观看| 欧美精品v日韩精品v国产精品| av免费在线免费观看| 狠狠干狠狠久久| 日本黄色大片在线观看| 成人3d动漫在线观看| 668精品在线视频| 国产精品久久欧美久久一区| 久久一夜天堂av一区二区三区| 热久久最新网址| 国产一区影院| 亚洲毛片在线看| 四虎永久在线精品| 国产精品77777竹菊影视小说| 日韩色妇久久av| 9999精品成人免费毛片在线看 | 亚洲综合激情另类小说区| 激情综合网俺也去| 视频福利一区| 午夜精品蜜臀一区二区三区免费 | 久久精品免费av| 精品一区二区精品| 亚洲看片网站| 视频在线日韩| 亚洲色图日韩av| 日本免费在线观看视频| av在线这里只有精品| 欧妇女乱妇女乱视频| 香蕉久久一区| 色系列之999| 国产在线观看第一页| 91免费在线视频观看| www.av毛片| 99国产精品免费网站| 萌白酱国产一区二区| 91国在线视频| 亚洲欧洲日产国码二区| 天天综合天天添夜夜添狠狠添| 欧美日韩一区二区三区视频播放| 国产成人精品在线| 国产美女视频一区二区三区| 欧美视频二区36p| 亚洲精品成人无码| 久久蜜桃资源一区二区老牛| 欧美二区在线| 深夜视频一区二区| 深夜福利日韩在线看| 国产精品久久欧美久久一区| 亚洲精品日产精品乱码不卡| 欧美性猛交xx| 欧美va天堂| 国产偷久久久精品专区| 在线观看网站免费入口在线观看国内| 精品亚洲va在线va天堂资源站| 亚洲永久精品在线观看| 国产亚洲自拍一区| 亚洲精品视频三区| 国产专区一区| 欧美在线视频二区| 亚洲精品大片| 欧美精品精品精品精品免费| 午夜福利视频一区二区| 欧美色道久久88综合亚洲精品| 精品成人无码一区二区三区| 人禽交欧美网站| 欧美精品久久96人妻无码| 8848成人影院| 欧美重口另类videos人妖| 丁香婷婷在线观看| 欧美一区二区免费视频| 青青草av在线播放| 国产精品久久影院| 久久久久久婷婷| 日韩激情在线观看| 国产精品无码电影在线观看| 免费看成人人体视频| 国产美女精品视频免费观看| av网站导航在线观看免费| 亚洲黄页视频免费观看| 在线观看视频二区| 亚洲一卡二卡三卡四卡无卡久久 | 亚洲盗摄视频| 成人av在线天堂| www.色在线| 日韩中文字幕在线视频播放| 蜜臀av免费在线观看| 欧美性极品少妇| 日本一级一片免费视频| 国产精品第一页第二页第三页| 欧美久久久久久久久久久| 午夜在线精品偷拍| 欧美少妇一区二区三区| 久9久9色综合| 粉嫩高清一区二区三区精品视频 | 另类av一区二区| 亚洲在线观看一区| 亚洲三级性片| 国产亚洲精品自在久久| 88xx成人网| 91精品国产91久久久久福利| 黄色网址免费在线观看| 国产午夜精品免费一区二区三区 | 一区二区欧美亚洲| 无码国产伦一区二区三区视频| 欧美福利视频一区| 毛片毛片女人毛片毛片| 夜夜亚洲天天久久| 免费精品在线视频| 国产视频一区在线观看| 在线免费播放av| 国产91丝袜在线播放| 国产女同无遮挡互慰高潮91| 天使萌一区二区三区免费观看| 日韩a级黄色片| 亚洲a在线视频| 午夜久久资源| 国产日韩欧美一区二区三区| 国产精品一区而去| 午夜视频在线观看精品中文| 91麻豆国产语对白在线观看| 91国拍精品国产粉嫩亚洲一区 | 午夜精品久久久久久久蜜桃| 婷婷综合另类小说色区| 久久人人爽人人爽人人| 亚洲欧美成人一区二区三区| 永久免费观看片现看| 国产欧美综合在线观看第十页| 波多野结衣视频播放| 成人黄色网址在线观看| 扒开伸进免费视频| 成人免费视频网站在线观看| 日本xxxx免费| 国产成人自拍在线| 无码人妻丰满熟妇区毛片蜜桃精品 | 亚洲男女视频在线观看| 日韩欧美的一区| 精品人妻无码一区二区| 精品国产乱码久久久久久图片| 国产福利小视频| 日韩一区二区三区免费看| 91禁在线观看| 日韩欧美国产高清| 北条麻妃一二三区| 亚洲变态欧美另类捆绑| 国产刺激高潮av| 日韩av在线免播放器| 熟妇人妻av无码一区二区三区| 欧美白人最猛性xxxxx69交| 丁香花免费高清完整在线播放 | 亚洲 欧美 日韩在线| 不卡视频在线观看| 女同毛片一区二区三区| 国产欧美日韩另类视频免费观看| 免费看裸体网站| 综合在线观看色| 免费在线视频观看| 五月天激情综合| 久久久久在线视频| 欧美日韩亚洲国产综合| 国产夫妻自拍av| 亚洲精品videossex少妇| 美州a亚洲一视本频v色道| 影音先锋日韩有码| av在线看片| 97在线免费观看视频| 成人黄色免费短视频| 国产日韩视频在线观看| 亚洲不卡在线| 欧美精品欧美精品| 91日韩免费| 国产精品又粗又长| 日本在线播放一区二区三区| 色婷婷.com| 成人18视频日本| 中文字幕伦理片| 亚洲韩国精品一区| 国产裸体美女永久免费无遮挡| 欧美一区二区在线视频| 偷拍精品一区二区三区| 伊人伊成久久人综合网小说| 中文字幕在线三区| 欧美一级片一区| 成人乱码手机视频| 精品午夜一区二区三区| 欧美gayvideo| 黄色一级片在线看| 久久超碰97中文字幕| 国产草草浮力影院| 亚洲天堂精品视频| 男人的天堂av网站| 精品国产一区二区三区久久影院| 91短视频版在线观看www免费| 欧美激情国内偷拍| 日本一区二区三区中文字幕| 国产一区二区三区色淫影院| 天天做天天爱天天综合网2021| 国产精品50p| 韩国v欧美v亚洲v日本v| 搡老熟女老女人一区二区| 亚洲婷婷综合久久一本伊一区| 在线天堂中文字幕| 日韩精品中文字幕一区二区三区 | 日日狠狠久久偷偷综合色| mm131午夜| 蜜臀99久久精品久久久久久软件| 人妖粗暴刺激videos呻吟| 一区在线播放视频| 波多野结衣视频网址| 亚洲电影在线看| 青草av在线| 成人午夜激情网| 日韩黄色大片| 不卡av免费在线| 99re成人精品视频| 久久免费视频精品| 日韩欧美国产一区二区在线播放| chinese偷拍一区二区三区| 97免费在线视频| 成人在线超碰| 99er在线视频| 国产精品自在在线| 午夜国产小视频| 欧美三级中文字| 国产日本在线| 国产精品国模在线| 国产精品片aa在线观看| 男人透女人免费视频| 99re亚洲国产精品| 奇米影视第四色777| 精品欧美黑人一区二区三区| 1区2区在线观看| 亚洲自拍偷拍区| 在线成人直播| 国产精品探花在线播放| 成人欧美一区二区三区1314| 亚洲无码精品国产| 菠萝蜜影院一区二区免费| 91麻豆精品国产综合久久久 | av色在线观看| 国产欧美日韩视频一区二区三区| 国户精品久久久久久久久久久不卡| 北条麻妃亚洲一区| 亚洲精选在线视频| 亚洲国产精品视频在线| 久久久久久999| 日本成人a网站| 日韩视频在线免费看| 国产色一区二区| 中文字幕av片| 久久夜精品香蕉| y111111国产精品久久久| 日本xxxxxxxxxx75| 久久亚洲影视婷婷| 中文字幕有码视频| 欧美成人激情视频| 国产精品中文字幕制服诱惑| 中国丰满人妻videoshd| 久久久精品综合| 一个人看的www日本高清视频| 精品综合久久久久久97| 国产亚洲成av人片在线观黄桃| 国产淫片免费看| 国产精品丝袜黑色高跟| 99久久亚洲精品日本无码| 97激碰免费视频| 国产精品一区2区3区| 日本不卡一区在线| 亚洲高清免费在线| 第一视频专区在线| 成人av免费看| 久久婷婷麻豆| 国产一区二区三区在线视频观看| 精品久久久久99| av一区在线| 日本福利视频在线观看| 久久久久高清精品| 99在线精品视频免费观看软件| 国内精品久久久久久| 日韩精品影视| 亚洲婷婷在线观看| 欧美日韩和欧美的一区二区| 好吊日av在线| 亚洲在线观看一区| 久久亚洲影视婷婷| www.超碰在线.com| 国产极品jizzhd欧美| 狠狠噜噜久久| 欧美福利在线视频| 日韩久久午夜影院| 日韩综合一区二区三区|