详解将微信小程序接口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 相关文章推荐
在子窗口中关闭父窗口的一句代码
Oct 21 Javascript
jQuery使用attr()方法同时设置多个属性值用法实例
Mar 26 Javascript
JavaScript基于ajax编辑信息用法实例
Jul 15 Javascript
基于JavaScript实现网页倒计时自动跳转代码
Dec 28 Javascript
javascript中的try catch异常捕获机制用法分析
Dec 14 Javascript
浅谈 vue 中的 watcher
Dec 04 Javascript
前后端如何实现登录token拦截校验详解
Sep 03 Javascript
vue路由对不同界面进行传参及跳转的总结
Apr 20 Javascript
js模拟F11页面全屏显示
Sep 17 Javascript
js实现简单扫雷
Nov 27 Javascript
vue使用echarts实现水平柱形图实例
Sep 09 Javascript
小程序实现tab标签页
Nov 16 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
是否存在第一台收音机的说法
2021/03/01 无线电
CI框架在CLI下执行占用内存过大问题的解决方法
2014/06/17 PHP
Symfony2学习笔记之插件格式分析
2016/03/17 PHP
js 优化次数过多的循环 考虑到性能问题
2011/03/05 Javascript
我的Node.js学习之路(一)
2014/07/06 Javascript
js实现简单排列组合的方法
2016/01/27 Javascript
JS实现的适合做faq或menu滑动效果示例
2016/11/17 Javascript
JS生成和下载二维码的代码
2016/12/07 Javascript
JS弹性运动实现方法分析
2016/12/15 Javascript
Vue + Webpack + Vue-loader学习教程之相关配置篇
2017/03/14 Javascript
js手机号4位显示空格,银行卡每4位显示空格效果
2017/03/23 Javascript
解决vue的 v-for 循环中图片加载路径问题
2018/09/03 Javascript
vue-router实现嵌套路由的讲解
2019/01/19 Javascript
vue 详情跳转至列表页实现列表页缓存
2019/03/27 Javascript
JavaScript中的ES6 Proxy的具体使用
2019/06/16 Javascript
详解基于原生JS验证表单组件xy-form
2019/08/20 Javascript
JavaScript字符串处理常见操作方法小结
2019/11/15 Javascript
python中利用xml.dom模块解析xml的方法教程
2017/05/24 Python
Python3.X 线程中信号量的使用方法示例
2017/07/24 Python
Python实现将MySQL数据库表中的数据导出生成csv格式文件的方法
2018/01/11 Python
Python/ArcPy遍历指定目录中的MDB文件方法
2018/10/27 Python
Python学习笔记之lambda表达式用法详解
2019/08/08 Python
python opencv 实现读取、显示、写入图像的方法
2020/06/08 Python
解决PyCharm IDE环境下,执行unittest不生成测试报告的问题
2020/09/03 Python
使用CSS3的rem属性制作响应式页面布局的要点解析
2016/05/24 HTML / CSS
css3图片边框border-image的用法
2017/06/30 HTML / CSS
英国和世界各地鲜花速递专家:Arena Flowers
2018/02/10 全球购物
舞会礼服和舞会鞋:PromGirl
2019/04/22 全球购物
德国W家官网,可直邮中国的母婴商城:Windeln.de
2021/03/03 全球购物
武汉世纪畅想数字传播有限公司 .NET笔试题
2015/06/13 面试题
授权委托书样本
2014/04/03 职场文书
软件售后服务承诺书
2014/05/21 职场文书
党员个人公开承诺书
2014/08/29 职场文书
大学毕业生自我评价
2015/03/02 职场文书
Redis调用Lua脚本及使用场景快速掌握
2022/03/16 Redis
Python Matplotlib绘制动画的代码详解
2022/05/30 Python