详解将微信小程序接口Promise化并使用async函数


Posted in Javascript onAugust 05, 2019

前言

小程序一直到现在接口还是和刚开始一样使用的回调函数的方式,如果想在小程序中不使用框架的情况下使用Promise+Async怎么办呢?

2019最新解决方案

1. 将接口Promise化

首先建一个文件wxPromise.js

const promisify = name => option => {
 return new Promise((resolve, reject) =>
  wx[name]({
   ...option,
   success: resolve,
   fail: reject,
  })
 )
}

const wxPro = new Proxy(wx, {
 get(target, prop) {
  return promisify(prop)
 }
})

export default wxPro

2.使用regeneratorRuntime让小程序兼容async函数

在github项目regenerator里下载packages/regenerator-runtime/runtime.js。

如果是最新版本的话引入后会报一个错误:

Function is not a function....

需要手动修改源码:

去掉源码最后的try-catch语句,并将开头的var runtime改成var regeneratorRuntime。

如果不想修改则可以直接下载0.13.1版本的源码。

最后

在想使用的页面里引入:

import wxPro from './utils/wxPromise.js'
import regeneratorRuntime from './utils/runtime.js'

//app.js
App({
 async onLaunch() {
  // wxPro.login().then((res) => {
  //  console.log(res)
  // })
  const result = await wxPro.login()
  console.log(result)
 },
 globalData: {
  userInfo: null
 }
})

这样就可以了,唯一有点麻烦的是每个要用的页面都要引入一次。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript中继承的一些示例方法与属性参考
Aug 07 Javascript
JQuery+CSS提示框实现思路及代码(纯手工打造)
May 07 Javascript
Javascript执行效率全面总结
Nov 04 Javascript
js获取指定的cookie的具体实现
Feb 20 Javascript
javascript比较语义化版本号的实现代码
Sep 09 Javascript
HTML5+Canvas调用手机拍照功能实现图片上传(上)
Apr 21 Javascript
easyui-datagrid开发实践(总结)
Aug 02 Javascript
AngularJS中filter的使用实例详解
Aug 25 Javascript
轻松理解vue的双向数据绑定问题
Oct 30 Javascript
在vscode中统一vue编码风格的方法
Feb 22 Javascript
vue上传图片到oss的方法示例(图片带有删除功能)
Sep 27 Javascript
JS/HTML5游戏常用算法之碰撞检测 像素检测算法实例详解
Dec 12 Javascript
使用apifm-wxapi模块中的问题及解决方法
Aug 05 #Javascript
使用apifm-wxapi快速开发小程序过程详解
Aug 05 #Javascript
浅谈Vue项目骨架屏注入实践
Aug 05 #Javascript
基于 vue-skeleton-webpack-plugin 的骨架屏实战
Aug 05 #Javascript
JS 自执行函数原理及用法
Aug 05 #Javascript
jQuery提示框插件SweetAlert用法分析
Aug 05 #jQuery
Nuxt.js实战和配置详解
Aug 05 #Javascript
You might like
深入理解php的MySQL连接类
2013/06/07 PHP
PHP表单提交后引号前自动加反斜杠的原因及三种办法关闭php魔术引号
2015/09/30 PHP
解析PHP的Yii框架中cookie和session功能的相关操作
2016/03/17 PHP
PHP简单实现遍历目录下特定文件的方法小结
2017/05/22 PHP
php+lottery.js实现九宫格抽奖功能
2019/07/21 PHP
php中的依赖注入实例详解
2019/08/14 PHP
jQuery 表单验证插件formValidation实现个性化错误提示
2009/06/23 Javascript
javascript setTimeout()传递函数参数(包括传递对象参数)
2010/04/07 Javascript
javascript 学习笔记(onchange等)
2010/11/14 Javascript
浅谈Javascript Base64 加密解密
2014/12/28 Javascript
jQuery中:image选择器用法实例
2015/01/03 Javascript
JavaScript实现同步于本地时间的动态时间显示方法
2015/02/02 Javascript
分享javascript、jquery实用代码段
2016/10/20 Javascript
JS实现简单短信验证码界面
2017/08/07 Javascript
使用svg实现动态时钟效果
2018/07/17 Javascript
angularJs中跳转到指定的锚点实例($anchorScroll)
2018/08/31 Javascript
微信小程序自定义带价格显示日历效果
2018/12/29 Javascript
详解nvm管理多版本node踩坑
2019/07/26 Javascript
JS获取动态添加元素的方法详解
2019/07/31 Javascript
javascript实现时钟动画
2020/12/03 Javascript
python获取文件版本信息、公司名和产品名的方法
2014/10/05 Python
Python通过matplotlib绘制动画简单实例
2017/12/13 Python
详解python实现线程安全的单例模式
2018/03/05 Python
python关于矩阵重复赋值覆盖问题的解决方法
2019/07/19 Python
python游戏开发的五个案例分享
2020/03/09 Python
Tensorflow实现将标签变为one-hot形式
2020/05/22 Python
HTML5 Canvas 破碎重组的视频特效的示例代码
2019/09/24 HTML / CSS
html5 offlline 缓存使用示例
2013/06/24 HTML / CSS
用HTML5制作数字时钟的教程
2015/05/11 HTML / CSS
NFL Game Pass欧洲:在线观看NFL比赛直播和点播,以高清质量播放
2018/08/30 全球购物
英国最大最好的无人机商店:Drones Direct
2019/07/12 全球购物
如何利用cmp命令比较文件
2016/04/11 面试题
办公室主任岗位职责范本
2015/03/31 职场文书
房地产销售助理岗位职责
2015/04/14 职场文书
2019求职信大礼包
2019/05/15 职场文书
react使用antd的上传组件实现文件表单一起提交功能(完整代码)
2021/06/29 Javascript