详解将微信小程序接口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同步Import,同步调用外部js的方法
Jul 08 Javascript
基于jquery的点击链接插入链接内容的代码
Jul 31 Javascript
js 通过html()及text()方法获取并设置p标签的显示值
May 14 Javascript
jQuery统计上传文件大小的方法
Jan 24 Javascript
JS实现自适应高度表单文本框的方法
Feb 25 Javascript
JS截取与分割字符串常用技巧总结
Nov 10 Javascript
获取JS中网页各种高宽与位置的方法总结
Jul 27 Javascript
Javascript基础回顾之(一) 类型
Jan 31 Javascript
JS实现自动轮播图效果(自适应屏幕宽度+手机触屏滑动)
Jun 19 Javascript
Angularjs 事件指令详细整理
Jul 27 Javascript
详解vue文件中使用echarts.js的两种方式
Oct 18 Javascript
layui实现根据table数据判断按钮显示情况的方法
Sep 26 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 include和require的区别深入解析
2013/06/17 PHP
Codeigniter实现智能裁剪图片的方法
2014/06/12 PHP
PHP生成指定长度随机数最简洁的方法
2014/07/14 PHP
PHP flush 函数使用注意事项
2016/08/26 PHP
PHP高精确度运算BC函数库实例详解
2017/08/15 PHP
PHP论坛实现积分系统的思路代码详解
2020/06/01 PHP
js 变量类型转换常用函数与代码[比较全]
2009/12/01 Javascript
28个JS验证函数收集
2010/03/02 Javascript
html dom节点操作(获取/修改/添加或删除)
2014/01/23 Javascript
IE6/IE7中JavaScript json提示缺少标识符、字符串或数字问题处理
2014/12/16 Javascript
javascript关于继承的用法汇总
2014/12/20 Javascript
javascript 动态脚本添加的简单方法
2016/10/11 Javascript
ionic开发中点击input时键盘自动弹出
2016/12/23 Javascript
nodejs入门教程四:URL相关模块用法分析
2017/04/24 NodeJs
详解NodeJs开发微信公众号
2018/05/25 NodeJs
CentOS7中源码编译安装NodeJS的完整步骤
2018/10/13 NodeJs
js实现延迟加载的几种方法详解
2019/01/19 Javascript
JS数组splice操作实例分析
2019/10/12 Javascript
Vue通过配置WebSocket并实现群聊功能
2019/12/31 Javascript
解决vue+router路由跳转不起作用的一项原因
2020/07/19 Javascript
[22:20]初生之犊-TI4第5名LGD战队纪录片
2014/08/13 DOTA
python迭代器与生成器详解
2016/03/10 Python
详解Python中的文件操作
2016/08/28 Python
python pytest进阶之xunit fixture详解
2019/06/27 Python
使用python serial 获取所有的串口名称的实例
2019/07/02 Python
使用APScheduler3.0.1 实现定时任务的方法
2019/07/22 Python
解决Pycharm中恢复被exclude的项目问题(pycharm source root)
2020/02/14 Python
Python 定义只读属性的实现方式
2020/03/05 Python
python中常见错误及解决方法
2020/06/21 Python
Python 实现国产SM3加密算法的示例代码
2020/09/21 Python
伦敦高级内衣品牌:Agent Provocateur(大内密探)
2016/08/23 全球购物
美国领先的奢侈手表在线零售商:WatchMaxx
2017/12/17 全球购物
2014年感恩节活动策划方案
2014/10/06 职场文书
基于Redis结合SpringBoot的秒杀案例详解
2021/10/05 Redis
Redis中缓存穿透/击穿/雪崩问题和解决方法
2021/12/04 Redis
浅谈Redis变慢的原因及排查方法
2022/06/21 Redis