詳解微信小程序 同步異步解決辦法
詳解微信小程序 同步異步解決辦法
小程序中函數(shù)體還沒(méi)有完成,下一個(gè)函數(shù)就開始執(zhí)行了,而且兩個(gè)函數(shù)之間需要傳參。那是因?yàn)槲⑿判〕绦蚝瘮?shù)是異步執(zhí)行的。但微信小程序增加了ES6的promise特性支持,微信小程序新版本中移除了promise的支持,需要自己使用第三方庫(kù)來(lái)自行實(shí)現(xiàn)ES6的promise特性。
WxService.js
import Tools from 'Tools' import es6 from '../assets/plugins/es6-promise' class Service { constructor() { this.__init() } /** * __init */ __init() { this.tools = new Tools this.__initDefaults() this.__initMethods() } /** * __initDefaults */ __initDefaults() { // 緩存非異步方法 this.noPromiseMethods = [ 'stopRecord', 'pauseVoice', 'stopVoice', 'pauseBackgroundAudio', 'stopBackgroundAudio', 'showNavigationBarLoading', 'hideNavigationBarLoading', 'createAnimation', 'createContext', 'hideKeyboard', 'stopPullDownRefresh', ] // 緩存wx接口方法名 this.instanceSource = { method: Object.keys(wx) } } /** * 遍歷wx方法對(duì)象,判斷是否為異步方法,是則構(gòu)造promise */ __initMethods() { for (let key in this.instanceSource) { this.instanceSource[key].forEach((method, index) => { this[method] = (...args) => { // 判斷是否為非異步方法或以 wx.on 開頭,或以 Sync 結(jié)尾的方法 if (this.noPromiseMethods.indexOf(method) !== -1 || method.substr(0, 2) === 'on' || /\w+Sync$/.test(method)) { return wx[method](...args) } return this.__defaultRequest(method, ...args) } }) } /** * 保留當(dāng)前頁(yè)面,跳轉(zhuǎn)到應(yīng)用內(nèi)的某個(gè)頁(yè)面 * @param {String} url 路徑 * @param {Object} params 參數(shù) */ this.navigateTo = (url, params) => { const $$url = this.tools.buildUrl(url, params) return new es6.Promise((resolve, reject) => { wx.navigateTo({ url: $$url, success: res => resolve(res), fail: res => reject(res), }) }) } /** * 關(guān)閉當(dāng)前頁(yè)面,跳轉(zhuǎn)到應(yīng)用內(nèi)的某個(gè)頁(yè)面 * @param {String} url 路徑 * @param {Object} params 參數(shù) */ this.redirectTo = (url, params) => { const $$url = this.tools.buildUrl(url, params) return new es6.Promise((resolve, reject) => { wx.redirectTo({ url: $$url, success: res => resolve(res), fail: res => reject(res), }) }) } } /** * 以wx下API作為底層方法 * @param {String} method 方法名 * @param {Object} obj 接收參數(shù) */ __defaultRequest(method = '', obj = {}) { return new es6.Promise((resolve, reject) => { obj.success = (res) => resolve(res) obj.fail = (res) => reject(res) wx[method](obj) }) } } export default Service
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
- 微信小程序中使用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)文章
解決mapper.xml中resultType映射類型的問(wèn)題
這篇文章主要介紹了解決mapper.xml中resultType映射類型的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06clickhouse?批量插入數(shù)據(jù)及ClickHouse常用命令詳解
這篇文章主要介紹了clickhouse?批量插入數(shù)據(jù)及ClickHouse常用命令,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03在SpringBoot中配置Thymeleaf的模板路徑方式
這篇文章主要介紹了在SpringBoot中配置Thymeleaf的模板路徑方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08MyBatis-Plus3.x版本使用入門和踩過(guò)的坑
Mybatis-Plus是Mybatis的增強(qiáng)版,他只是在Mybatis的基礎(chǔ)上增加了功能,且并未對(duì)原有功能進(jìn)行任何的改動(dòng),本文給大家說(shuō)一下MyBatis-Plus3.x版本使用入門和踩過(guò)的坑,感興趣的朋友跟隨小編一起看看吧2023-10-10