Vue中的同步和異步調(diào)用順序詳解
Vue的同步和異步調(diào)用順序
Vue中的方法調(diào)用順序是依次進(jìn)行的,方法體內(nèi)部也是依次執(zhí)行的,但是,兩個(gè)方法體的執(zhí)行順序并不能?chē)?yán)格控制。
以下方法中都帶有promise函數(shù)或異步調(diào)用。
?? ?initUserData() { ?? ? ?this.getPsCountryList() // 1 獲取國(guó)家列表stateOptions,方法內(nèi)同步 ?? ? ?this.getTimeZone() // 2 獲取時(shí)區(qū)timezones,方法內(nèi)同步 ?? ? ?this.getUserInfo() // 3 獲取用戶信息 ?? ?}
在實(shí)際運(yùn)行中,三個(gè)方法的執(zhí)行順序是1-2-3,但是方法3始終不能獲取到stateOptions和timezones
背后的調(diào)用順序是1-2-3,但是,方法的執(zhí)行時(shí)間并沒(méi)有嚴(yán)格控制。
如果想要做到方法調(diào)用和執(zhí)行是同步的,可以使用async和await修飾符。
例如
?? ?async initUserData() { ?? ? ?await this.getPsCountryList() // 1 獲取國(guó)家列表stateOptions,方法內(nèi)同步 ?? ? ?await this.getTimeZone() // 2 獲取時(shí)區(qū)timezones,方法內(nèi)同步 ?? ? ?await this.getUserInfo() // 3 獲取用戶信息 ?? ?}
Vue兩個(gè)異步方法順序執(zhí)行
需求:兩個(gè)異步函數(shù)按順序執(zhí)行,首先獲取第一個(gè)異步函數(shù)的返回的值,接著在第二個(gè)異步函數(shù)里面調(diào)用
方法:先在第一個(gè)異步函數(shù)里返回一個(gè)promise,接著用async和await調(diào)用它
第一個(gè)異步方法
getAllNotice() { ?? ??? ??? ??? ?let data = { ?? ??? ??? ??? ??? ?"searchParams": [{ ?? ??? ??? ??? ??? ??? ?"fieldName": "equipmentId", ?? ??? ??? ??? ??? ??? ?"operate": "eq", ?? ??? ??? ??? ??? ??? ?"value": "000000" ?? ??? ??? ??? ??? ?}], ?? ??? ??? ??? ??? ?"size": -1 ?? ??? ??? ??? ?} ?? ??? ??? ??? ?return new Promise((resolve) => { ?? ??? ??? ??? ??? ?API.getNotice(data).then(res => { ?? ??? ??? ??? ??? ??? ?console.log(res) ?? ??? ??? ??? ??? ??? ?if (res.data.code == "200") { ?? ??? ??? ??? ??? ??? ??? ?this.noticeList = res.data.data.list ?? ??? ??? ??? ??? ??? ??? ?console.log(this.noticeList) ?? ??? ??? ??? ??? ??? ??? ?resolve(); ?? ??? ??? ??? ??? ??? ??? ?return ?? ??? ??? ??? ??? ??? ?} else { ?? ??? ??? ??? ??? ??? ??? ?uni.showToast({ ?? ??? ??? ??? ??? ??? ??? ??? ?title: res.data.message, ?? ??? ??? ??? ??? ??? ??? ??? ?duration: 1000, ?? ??? ??? ??? ??? ??? ??? ??? ?icon: "none" ?? ??? ??? ??? ??? ??? ??? ?}) ?? ??? ??? ??? ??? ??? ?} ?? ??? ??? ??? ??? ?}) ?? ??? ??? ??? ?})?? ??? ??? ??? ? ?? ??? ??? ?},
第二個(gè)異步方法
//獲得當(dāng)前的公告列表 ?? ??? ??? ?getNowNotice(){ ?? ??? ??? ??? ?//獲取當(dāng)前時(shí)間戳 ?? ??? ??? ??? ?var timestamp = (new Date()).getTime(); ?? ??? ??? ??? ?var _this = this ?? ??? ??? ??? ?console.log(timestamp); ?? ??? ??? ??? ?//將noticeList的結(jié)束時(shí)間轉(zhuǎn)換成時(shí)間戳 ?? ??? ??? ??? ?for(var i=0; i<this.noticeList.length; i++){ ?? ??? ??? ??? ??? ?var endTimeStamp = TIME.TimeToTimeStamp(this.noticeList[i].endTime) ?? ??? ??? ??? ??? ?console.log(endTimeStamp) ?? ??? ??? ??? ??? ?if(endTimeStamp>timestamp){ ?? ??? ??? ??? ??? ??? ?_this.noticeNewList.push(this.noticeList[i]) ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ?} ?? ??? ??? ??? ?console.log("noticeNewList",_this.noticeNewList) ?? ??? ??? ?}
用async和await
async onLoad(option) { ?? ??? ??? ?await this.getAllNotice() ?? ??? ??? ?await this.getNowNotice() ?? ??? ?},
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue2 中如何實(shí)現(xiàn)動(dòng)態(tài)表單增刪改查實(shí)例
本篇文章主要介紹了vue2 中如何實(shí)現(xiàn)動(dòng)態(tài)表單增刪改查實(shí)例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-06-06Element基于el-input數(shù)字范圍輸入框的實(shí)現(xiàn)
本文主要介紹了?Element基于el-input數(shù)字范圍輸入框的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04Vue2.4+新增屬性.sync、$attrs、$listeners的具體使用
這篇文章主要介紹了Vue2.4+新增屬性.sync、$attrs、$listeners的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03vue proxy 的優(yōu)勢(shì)與使用場(chǎng)景實(shí)現(xiàn)
這篇文章主要介紹了vue proxy 的優(yōu)勢(shì)與使用場(chǎng)景實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06vue.js父子組件通信動(dòng)態(tài)綁定的實(shí)例
今天小編就為大家分享一篇vue.js父子組件通信動(dòng)態(tài)綁定的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-09-09vue+canvas實(shí)現(xiàn)炫酷時(shí)鐘效果的倒計(jì)時(shí)插件(已發(fā)布到npm的vue2插件,開(kāi)箱即用)
這篇文章主要介紹了vue+canvas實(shí)現(xiàn)炫酷時(shí)鐘效果的倒計(jì)時(shí)插件(已發(fā)布到npm的vue2插件,開(kāi)箱即用) ,需要的朋友可以參考下2018-11-11詳解vue-cli項(xiàng)目中的proxyTable跨域問(wèn)題小結(jié)
這篇文章主要介紹了詳解vue-cli項(xiàng)目中的proxyTable跨域問(wèn)題小結(jié),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-02-02Vuejs 頁(yè)面的區(qū)域化與組件封裝的實(shí)現(xiàn)
本篇文章主要介紹了Vuejs 頁(yè)面的區(qū)域化與組件封裝的實(shí)現(xiàn)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-09-09基于vue實(shí)現(xiàn)一個(gè)禪道主頁(yè)拖拽效果
最近在做一個(gè)基于vue的后臺(tái)管理項(xiàng)目。接下來(lái)通過(guò)本文給大家分析一款基于vue做一個(gè)禪道主頁(yè)拖拽效果,需要的朋友可以參考下2019-05-05