微信小程序異步處理詳解
本文實(shí)例為大家分享了微信小程序異步處理的具體方法,供大家參考,具體內(nèi)容如下
直接看問(wèn)題:

然后看打印的結(jié)果:

根據(jù)上面兩圖可以看出,代碼上先執(zhí)行的網(wǎng)絡(luò)請(qǐng)求,再執(zhí)行打印的變量,但是從下面打印的結(jié)果來(lái)看,先出結(jié)果的是執(zhí)行打印變量的函數(shù)(aafn函數(shù)),再打印出網(wǎng)絡(luò)請(qǐng)求success的回調(diào)里返回的數(shù)據(jù)和賦值后的變量的值;
為什么先執(zhí)行的aafn,并且打印的值沒(méi)有賦值上?
因?yàn)閣x.request是一個(gè)異步的請(qǐng)求,所以數(shù)據(jù)請(qǐng)求的同時(shí),可以繼續(xù)向下執(zhí)行函數(shù)。所以這里值還沒(méi)有賦值上就開(kāi)始打印了變量的值;
這種情況,怎么解決呢?
方法一:
嵌套
在wx.request的success回調(diào)里執(zhí)行aafn函數(shù)

然后運(yùn)行結(jié)果

這里就取到值了
但是如果邏輯很復(fù)雜,需要用到很多層異步,就像這樣:
asyncFn1(function(){
//...
asyncFn2(function(){
//...
asyncFn3(function(){
//...
asyncFn4(function(){
//...
asyncFn5(function(){
//...
});
});
});
});
});
這樣代碼看起來(lái)就很不好看,代碼的可讀性和可維護(hù)性就不好了
那怎么解決這個(gè)問(wèn)題呢?Promise這種概念的產(chǎn)生,很好地解決了這一切,Promise是什么?這里我就不多說(shuō)了有興趣的自己去看一看,Promise介紹鏈接
先看看Promise的方式:
function asyncFn1(){
return new Promise(function (resolve, reject) {
//...
})
}
// asyncFn2,3,4,5也實(shí)現(xiàn)成跟asyncFn1一樣的方式...
調(diào)用
asyncFn1() .then(asyncFn2) .then(asyncFn3) .then(asyncFn4) .then(asyncFn5);
這樣的話,異步函數(shù)就可以依次執(zhí)行了
微信小程序的異步API怎么支持Promise呢?我們可以一個(gè)一個(gè)的用Promise去包裝這些API,但是這個(gè)還是比較麻煩的。不過(guò),小程序的API的參數(shù)格式都比較統(tǒng)一,只接受一個(gè)object參數(shù),回調(diào)都是在這個(gè)參數(shù)中設(shè)置,所以,這為了統(tǒng)一處理提供了便利,寫(xiě)一個(gè)工具方法,來(lái)完成這樣的工作
首先需要引用一個(gè)叫bluebird.js的文件;
進(jìn)入bluebird官網(wǎng)下載:

這個(gè)好像是不能下載的,但是你可以點(diǎn)擊進(jìn)入,然后復(fù)制,在小程序里創(chuàng)建一個(gè)js文件,將代碼復(fù)制到這個(gè)js里面,然后引用。
然后再寫(xiě)一個(gè)JS,里面寫(xiě)工具方法:

下面是prom.js

然后需要使用的那個(gè)頁(yè)面的js里引入prom.js:

調(diào)用:

打印結(jié)果

這樣就可以了,完結(jié)。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 微信小程序中使用Async-await方法異步請(qǐng)求變?yōu)橥秸?qǐng)求方法
- 詳解將微信小程序接口Promise化并使用async函數(shù)
- 微信小程序 緩存(本地緩存、異步緩存、同步緩存)詳解
- 詳解微信小程序 同步異步解決辦法
- 微信小程序 wx.request方法的異步封裝實(shí)例詳解
- 微信小程序onLaunch異步,首頁(yè)onLoad先執(zhí)行?
- 微信小程序中使用ECharts 異步加載數(shù)據(jù)的方法
- 微信小程序之支付后調(diào)用SDK的異步通知及驗(yàn)證處理訂單方法
- 微信小程序中使用Promise進(jìn)行異步流程處理的實(shí)例詳解
- 微信小程序 es6-promise.js封裝請(qǐng)求與處理異步進(jìn)程
- 微信小程序利用co處理異步流程的方法教程
- 微信小程序中使用 async/await的方法實(shí)例分析
相關(guān)文章
JavaScript不使用prototype和new實(shí)現(xiàn)繼承機(jī)制
這篇文章主要介紹了JavaScript不使用prototype和new實(shí)現(xiàn)繼承機(jī)制的相關(guān)資料,需要的朋友可以參考下2014-12-12
JS獲取鼠標(biāo)坐標(biāo)的實(shí)例方法
這篇文章介紹了JS獲取鼠標(biāo)坐標(biāo)的實(shí)例方法,有需要的朋友可以參考一下2013-07-07
axios利用params/data發(fā)送參數(shù)給springboot?controlle的正確獲取方式
這篇文章主要給大家介紹了關(guān)于axios利用params/data發(fā)送參數(shù)給springboot?controlle的正確獲取方式,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-02-02
JavaScript實(shí)現(xiàn)按照指定長(zhǎng)度為數(shù)字前面補(bǔ)零輸出的方法
這篇文章主要介紹了JavaScript實(shí)現(xiàn)按照指定長(zhǎng)度為數(shù)字前面補(bǔ)零輸出的方法,實(shí)例分析了javascript操作數(shù)字補(bǔ)零的技巧,需要的朋友可以參考下2015-03-03
JavaScript中事件流冒泡的原理與實(shí)現(xiàn)
在JavaScript中,事件流冒泡是一種非常重要的概念,它是指事件從最內(nèi)層的元素開(kāi)始,逐級(jí)向外傳播到最外層元素的過(guò)程,下面我們就來(lái)了解下JavaScript中事件流冒泡的原理與實(shí)現(xiàn)吧2023-11-11
微信小程序開(kāi)發(fā)之實(shí)現(xiàn)記賬本
這篇文章主要為大家詳細(xì)介紹了如何通過(guò)微信小程序開(kāi)發(fā)一個(gè)簡(jiǎn)單的記賬本,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以和小編一起學(xué)習(xí)一下2023-01-01
用javascript動(dòng)態(tài)調(diào)整iframe高度的代碼
用javascript動(dòng)態(tài)調(diào)整iframe高度的代碼...2007-04-04

