详解微信小程序 同步异步解决办法

小程序中函数体还没有完成,下一个函数就开始执行了,而且两个函数之间需要传参。那是因为微信小程序函数是异步执行的。但微信小程序增加了ES6的promise特性支持,微信小程序新版本中移除了promise的支持,需要自己使用第三方库来自行实现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方法对象,判断是否为异步方法,是则构造promise
*/
__initMethods() {
for (let key in this.instanceSource) {
this.instanceSource[key].forEach((method, index) => {
this[method] = (...args) => {
// 判断是否为非异步方法或以 wx.on 开头,或以 Sync 结尾的方法
if (this.noPromiseMethods.indexOf(method) !== -1 || method.substr(0, 2) === 'on' || /\w+Sync$/.test(method)) {
return wx[method](...args)
}
return this.__defaultRequest(method, ...args)
}
})
}
/**
* 保留当前页面,跳转到应用内的某个页面
* @param {String} url 路径
* @param {Object} params 参数
*/
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),
})
})
}
/**
* 关闭当前页面,跳转到应用内的某个页面
* @param {String} url 路径
* @param {Object} params 参数
*/
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 接收参数
*/
__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
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# 详解微信小程序
# 同步异步
# 小程序
# 微信小程序中使用Async-await方法异步请求变为同步请求方法
# 详解将微信小程序接口Promise化并使用async函数
# 微信小程序 缓存(本地缓存、异步缓存、同步缓存)详解
# 微信小程序异步处理详解
# 微信小程序 wx.request方法的异步封装实例详解
# 微信小程序onLaunch异步
# 首页onLoad先执行?
# 微信小程序中使用ECharts 异步加载数据的方法
# 微信小程序之支付后调用SDK的异步通知及验证处理订单方法
# 微信小程序中使用Promise进行异步流程处理的实例详解
# 微信小程序 es6-promise.js封装请求与处理异步进程
# 微信小程序利用co处理异步流程的方法教程
# 微信小程序中使用 async/await的方法实例分析
# 或以
# 跳转到
# 判断是否
# 还没有
# 遍历
# 希望能
# 谢谢大家
# 第三方
# 解决办法
# 那是因为
# 新版本
# 移除
# 增加了
# 就开始
# noPromiseMethods
# tools
# __initMethods
# createAnimation
# __init
# __initDefaults
相关文章:
建站之星展会模版如何一键下载生成?
北京营销型网站制作公司,可以用python做一个营销推广网站吗?
香港服务器网站推广:SEO优化与外贸独立站搭建策略
建站主机选择指南:服务器配置与SEO优化实战技巧
微信推文制作网站有哪些,怎么做微信推文,急?
学校免费自助建站系统:智能生成+拖拽设计+多端适配
重庆网站制作公司哪家好,重庆中考招生办官方网站?
建站之星微信建站一键生成小程序+多端营销系统
建站10G流量真的够用吗?如何应对访问高峰?
建站之星伪静态规则如何设置?
南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?
Python多线程使用规范_线程安全解析【教程】
如何选择PHP开源工具快速搭建网站?
ui设计制作网站有哪些,手机UI设计网址吗?
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?
制作网站公司那家好,网络公司是做什么的?
网站制作免费,什么网站能看正片电影?
贸易公司网站制作流程,出口贸易网站设计怎么做?
C++如何使用std::optional?(处理可选值)
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
动图在线制作网站有哪些,滑动动图图集怎么做?
网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?
建站之星如何实现网站加密操作?
如何在香港免费服务器上快速搭建网站?
制作宣传网站的软件,小红书可以宣传网站吗?
如何挑选优质建站一级代理提升网站排名?
如何破解联通资金短缺导致的基站建设难题?
小程序网站制作需要准备什么资料,如何制作小程序?
建站主机无法访问?如何排查域名与服务器问题
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法
网页设计网站制作软件,microsoft office哪个可以创建网页?
怀化网站制作公司,怀化新生儿上户网上办理流程?
PHP正则匹配日期和时间(时间戳转换)的实例代码
如何快速生成可下载的建站源码工具?
建站之星代理如何获取技术支持?
表情包在线制作网站免费,表情包怎么弄?
建站之星后台密码遗忘如何找回?
网站设计制作公司地址,网站建设比较好的公司都有哪些?
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
微信小程序 input输入框控件详解及实例(多种示例)
建站之星客服服务时间及联系方式如何?
如何快速上传建站程序避免常见错误?
如何零基础开发自助建站系统?完整教程解析
高端建站三要素:定制模板、企业官网与响应式设计优化
如何在橙子建站中快速调整背景颜色?
小建面朝正北,A点实际方位是否存在偏差?
制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?
如何制作一个表白网站视频,关于勇敢表白的小标题?
*请认真填写需求信息,我们会在24小时内与您取得联系。