微信小程序 同步异步解决方案
来源:互联网 发布:淘宝网休闲鞋 编辑:程序博客网 时间:2024/06/06 03:18
小程序中函数体还没有完成,下一个函数就开始执行了,而且两个函数之间需要传参。那是因为微信小程序函数是异步执行的。但微信小程序增加了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
阅读全文
0 0
- 微信小程序 同步异步解决方案
- 微信小程序的同步异步解决方案
- 异步终极解决方案-用同步方式写异步代码
- 同步和异步(程序执行的同步和异步,传输的同步和异步)
- 程序异步和同步之间的冲突
- 程序同步与异步的区别
- 利用XMLHttpRequest同步和异步下载二进制文件的解决方案。
- 异步 同步
- 同步异步
- 同步异步
- 同步异步
- 同步异步
- 同步异步
- 同步异步
- 同步,异步
- 同步异步
- 同步、异步
- 同步异步
- 【R的网络提取】用R进行CSDN任意博主的信息提取
- 三种方式实现圆角图片
- 一维数组和二维数组的数组和指针调用方法
- 使用mybatis的客户管理系统实现
- 知识图谱
- 微信小程序 同步异步解决方案
- 哈密顿绕行世界问题
- Hive JDBC Java示例项目
- 关于ueditor编辑器插件的使用记录 --- 解决"后端配置项没有正常加载,上传插件不能正常使用"上传图片处的问题
- 409. Longest Palindrome
- SqlServer的批量插入【转】我也没有去验证,等实际用的时候要验证一下
- matlab如何在命令窗口显示多位有效数值
- aes加密,CBC
- 在 Dataguard 环境中诊断 SQLNET 错误