最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue中Promise的使用方法詳情

 更新時(shí)間:2022年03月04日 11:37:02   作者:kuokay  
這篇文章主要介紹了vue中Promise的使用方法詳情,Promise可以說(shuō)是異步編程的一種解決方法,主要是為了解決代碼亂的情景而出現(xiàn)的,下文介紹其具體用法,需要的小伙伴可以參考一下

簡(jiǎn)介:

promise是什么,它可以說(shuō)是異步編程的一種解決方法,就拿傳統(tǒng)的ajax發(fā)請(qǐng)求來(lái)說(shuō),單個(gè)還好,如果是一個(gè)請(qǐng)求回來(lái)的數(shù)據(jù)還要被其他請(qǐng)求調(diào)用,不斷地嵌套,可想而知,代碼看起來(lái)是很亂的,promise主要是為了解決這種情景而出現(xiàn)的。

一、使用

1.promise是一種異步解決方案

  • 由于ajax異步方式請(qǐng)求數(shù)據(jù)時(shí),我們不能知道數(shù)據(jù)具體回來(lái)的事件,所以過(guò)去只能將一個(gè)callback函數(shù)傳遞給ajax封裝的方法,當(dāng)ajax異步請(qǐng)求完成時(shí),執(zhí)行callback函數(shù)。
  • promise對(duì)象接受resolve和reject兩個(gè)參數(shù),當(dāng)一個(gè)異步動(dòng)作發(fā)生時(shí),promise對(duì)象會(huì)通過(guò)resolve完成對(duì)動(dòng)作成功進(jìn)行解析,reject會(huì)捕獲這個(gè)動(dòng)作的異常。一個(gè)promise對(duì)象,通過(guò)new Promise().then()執(zhí)行下一步驟操作。
  • axios is a promise based HTTP client for the browser and node.js。也就是說(shuō),使用axios發(fā)出請(qǐng)求,難免涉及promise。

Promise構(gòu)造函數(shù)的參數(shù)是一個(gè)函數(shù),函數(shù)里面的代碼是異步的,即Promise里面的操作,和Promise()外面的操作時(shí)異步"同時(shí)"進(jìn)行的。Promise中的函數(shù)的第一個(gè)參數(shù)是回調(diào)函數(shù),resolve用來(lái)觸發(fā)then里面的代碼,第二個(gè)參數(shù)是回調(diào)函數(shù),reject用來(lái)觸發(fā)catch中的代碼,throw new Error();也可以觸發(fā)catch,

resolve和reject是兩個(gè)回調(diào)函數(shù),調(diào)用resolve會(huì)觸發(fā)then,reject會(huì)觸發(fā)catch:

<script>
new Promise((resolve, reject) =>{
? ? setTimeout(() =>{
? ? ? ? //成功的時(shí)候調(diào)用resolve
? ? ? ? resolve('成功data')
? ? ? ? //失敗的時(shí)候調(diào)用reject
? ? ? ? reject('error message')
? ? }, 1000)
}).then((data) =>{
? ? //處理成功后的邏輯
? ? console.log(data);//這個(gè)data 是接收的resolve參數(shù)--
}).catch((err) =>{
? ? console.log(err);
})
</script>  
  • 在一個(gè)promise鏈中,只要任何一個(gè)promise被reject,promise鏈就被破壞了,reject之后的promise都不會(huì)再執(zhí)行,而是直接調(diào)用.catch方法。
p1().then(p2).then(p3)
? .then(function(data) {
? ? console.log('data: ' + data);
? })
? .catch(function(error) {
? ? console.log('error: ' + error);
? });
??
function p1() {
? return new Promise(function(resolve, reject) {
? ? console.log('p1 resolved');
? ? resolve(123);
? });
}
??
function p2() {
? return new Promise(function(resolve, reject) {
? ? console.log('p2 rejected');
? ? reject(456);
? });
}
??
function p3() {
? return new Promise(function(resolve, reject) {
? ? console.log('p3 resolved');
? ? resolve(789);
? });
}// 執(zhí)行結(jié)果p1 resolvedp2 rejectederror: 456

2.async await

Promise構(gòu)造函數(shù)的參數(shù)是一個(gè)函數(shù),函數(shù)里面的代碼是異步的,即Promise里面的操作,和Promise()外面的操作時(shí)異步"同時(shí)"進(jìn)行的。此外,只要在函數(shù)前面加上async 關(guān)鍵字,也可以指明函數(shù)是異步的。

async關(guān)鍵字實(shí)際是通過(guò)Promise實(shí)現(xiàn),如果async 函數(shù)中有返回一個(gè)值 ,當(dāng)調(diào)用該函數(shù)時(shí),內(nèi)部會(huì)調(diào)用Promise.solve() 方法把它轉(zhuǎn)化成一個(gè)promise 對(duì)象作為返回,但如果timeout 函數(shù)內(nèi)部拋出錯(cuò)誤,那么就會(huì)調(diào)用Promise.reject() 返回一個(gè)promise 對(duì)象。若某函數(shù)調(diào)用一個(gè)異步函數(shù)(比如內(nèi)部含有primise),該函數(shù)應(yīng)用async修飾。

await表示“等待”,修飾返回promise 對(duì)象的表達(dá)式。注意await 關(guān)鍵字只能放到async 函數(shù)里面。

function doubleAfter2seconds(num) {
? ? return new Promise((resolve, reject) => {
? ? ? ? setTimeout(() => {
? ? ? ? ? ? resolve(2 * num)
? ? ? ? }, 2000);
? ? } )
}//寫(xiě)一個(gè)async 函數(shù),從而可以使用await 關(guān)鍵字, await 后面放置的就是返回promise對(duì)象的一個(gè)表達(dá)式,所以它后面可以寫(xiě)上 doubleAfter2seconds 函數(shù)的調(diào)用
async function testResult() {
? ? let result = await doubleAfter2seconds(30);
? ? console.log(result);
}

await 等待后面的promise對(duì)象執(zhí)行完畢,然后拿到promise resolve 的值并進(jìn)行返回。顯然await可以修飾axios請(qǐng)求,等待得到結(jié)果再往下進(jìn)行,如:

async getUserList(){
? ? ? ? ? ? const {data: res} = await this.$http.get('users', {
? ? ? ? ? ? ? ? params: this.queryInfo
? ? ? ? ? ? })
? ? ? ? ? ? //console.log(res)
? ? ? ? ? ? if (res.meta.status !== 200) return this.$message.error('獲取用戶列表失敗! ')
? ? ? ? ? ? this.userlist = res.data.users
? ? ? ? ? ? this.total = res.data.total
? ? ? ? }

到此這篇關(guān)于vue中Promise的使用方法詳情的文章就介紹到這了,更多相關(guān)vue中Promise的用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue使用video.js實(shí)現(xiàn)播放m3u8格式的視頻

    vue使用video.js實(shí)現(xiàn)播放m3u8格式的視頻

    這篇文章主要為大家詳細(xì)介紹了vue如何使用video.js實(shí)現(xiàn)播放m3u8格式的視頻,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • Vue 中使用 typescript的方法詳解

    Vue 中使用 typescript的方法詳解

    Typescript 5年內(nèi)的熱度隨時(shí)間變化的趨勢(shì),整體呈現(xiàn)一個(gè)上升的趨勢(shì)。也說(shuō)明ts越來(lái)越&#65039;受大家的關(guān)注了。這篇文章主要介紹了Vue 中使用 typescript的方法詳解,需要的朋友可以參考下
    2020-02-02
  • vue單向數(shù)據(jù)流的深入理解

    vue單向數(shù)據(jù)流的深入理解

    隨著前端的項(xiàng)目的越來(lái)越復(fù)雜,出現(xiàn)了一堆概念來(lái)降低開(kāi)發(fā)的復(fù)雜性,單向數(shù)據(jù)流就是其中一個(gè),下面這篇文章主要給大家介紹了關(guān)于vue單向數(shù)據(jù)流的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-01-01
  • vue3項(xiàng)目vite.config.js配置代理、端口、打包名以及圖片壓縮

    vue3項(xiàng)目vite.config.js配置代理、端口、打包名以及圖片壓縮

    這篇文章主要給大家介紹了關(guān)于vue3項(xiàng)目vite.config.js配置代理、端口、打包名以及圖片壓縮的相關(guān)資料,因?yàn)?.0版本中vue已經(jīng)內(nèi)置了很多關(guān)于webpack的配置,一般情況下開(kāi)箱即用,需要修改則可以在vue.config.js文件中完成,需要的朋友可以參考下
    2023-12-12
  • vue中實(shí)現(xiàn)點(diǎn)擊變成全屏及縮放功能

    vue中實(shí)現(xiàn)點(diǎn)擊變成全屏及縮放功能

    這篇文章主要介紹了vue中實(shí)現(xiàn)點(diǎn)擊變成全屏及縮放功能,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Vue項(xiàng)目中v-bind動(dòng)態(tài)綁定src路徑不成功問(wèn)題及解決

    Vue項(xiàng)目中v-bind動(dòng)態(tài)綁定src路徑不成功問(wèn)題及解決

    這篇文章主要介紹了Vue項(xiàng)目中v-bind動(dòng)態(tài)綁定src路徑不成功問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • Vue3進(jìn)行樣式Scoped和Global的設(shè)置方法

    Vue3進(jìn)行樣式Scoped和Global的設(shè)置方法

    在 Vue 3 中,組件化開(kāi)發(fā)成為了我們提升前端開(kāi)發(fā)效率的利器,其中,樣式的管理也是一個(gè)至關(guān)重要的部分,在 Vue 中,我們會(huì)經(jīng)常使用兩種樣式作用域:Scoped 樣式和 Global 樣式,本文將通過(guò)示例代碼來(lái)介紹Vue3如何進(jìn)行樣式Scoped和Global的設(shè)置,需要的朋友可以參考下
    2025-01-01
  • vue-video-player視頻播放器使用配置詳解

    vue-video-player視頻播放器使用配置詳解

    這篇文章主要為大家詳細(xì)介紹了vue-video-player視頻播放器的使用和配置,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • Vue3監(jiān)聽(tīng)reactive對(duì)象中屬性變化的方法

    Vue3監(jiān)聽(tīng)reactive對(duì)象中屬性變化的方法

    在 Vue 3 中,如果你想監(jiān)聽(tīng) reactive 對(duì)象中的某個(gè)屬性發(fā)生的變化,你可以使用 watch 函數(shù)進(jìn)行監(jiān)聽(tīng),watch 函數(shù)允許你觀察 reactive 對(duì)象的某個(gè)屬性或者整個(gè)對(duì)象,所以本文給大家介紹了Vue3監(jiān)聽(tīng)reactive對(duì)象中屬性變化的方法,需要的朋友可以參考下
    2024-08-08
  • vue select二級(jí)聯(lián)動(dòng)第二級(jí)默認(rèn)選中第一個(gè)option值的實(shí)例

    vue select二級(jí)聯(lián)動(dòng)第二級(jí)默認(rèn)選中第一個(gè)option值的實(shí)例

    下面小編就為大家分享一篇vue select二級(jí)聯(lián)動(dòng)第二級(jí)默認(rèn)選中第一個(gè)option值的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01

最新評(píng)論

临桂县| 嵊州市| 武清区| 万盛区| 德州市| 海城市| 江门市| 兴文县| 青川县| 嫩江县| 沂源县| 永宁县| 渑池县| 浠水县| 通渭县| 泰宁县| 和政县| 琼结县| 石门县| 都安| 綦江县| 卢氏县| 会泽县| 义乌市| 兴安县| 奎屯市| 咸丰县| 沙雅县| 孟津县| 黑水县| 荃湾区| 手游| 招远市| 和政县| 英超| 青冈县| 吉林市| 古田县| 安陆市| 古丈县| 连江县|