详解将微信小程序接口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 相关文章推荐
js 编码转换 gb2312 和 utf8 互转的2种方法
Aug 07 Javascript
禁用Tab键JS代码兼容Firefox和IE
Apr 18 Javascript
javascript使用appendChild追加节点实例
Jan 12 Javascript
基于JS实现PHP的sprintf函数实例
Nov 14 Javascript
Bootstrap列表组学习使用
Feb 09 Javascript
JS时间控制实现动态效果的实例讲解
Jul 31 Javascript
详解vue-cil和webpack中本地静态图片的路径问题解决方案
Sep 27 Javascript
JavaScript实现计算圆周率到小数点后100位的方法示例
May 08 Javascript
Vue.js 中的实用工具方法【推荐】
Jul 04 Javascript
详解微信小程序(Taro)手动埋点和自动埋点的实现
Mar 02 Javascript
Node实现搜索框进行模糊查询
Jun 28 Javascript
如何通过简单的代码描述Angular父组件、子组件传值
Apr 07 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输出控制功能在简繁体转换中的应用
2006/10/09 PHP
mysql_fetch_row,mysql_fetch_array,mysql_fetch_assoc的区别
2009/04/24 PHP
php和mysql中uft-8中文编码乱码的几种解决办法
2012/04/19 PHP
PHP判断变量是否为0的方法
2014/02/08 PHP
如何在Laravel之外使用illuminate组件详解
2020/09/20 PHP
一段多浏览器的"复制到剪贴板"javascript代码
2007/03/27 Javascript
基于jquery的一个图片hover的插件
2010/04/24 Javascript
基于jQuery实现的百度导航li拖放排列效果,即时更新数据库
2012/07/31 Javascript
深入讲解AngularJS中的自定义指令的使用
2015/06/18 Javascript
jquery实现的树形目录实例
2015/06/26 Javascript
全面了解javascript中的错误处理机制
2016/07/18 Javascript
使用Bootstrap Tabs选项卡Ajax加载数据实现
2016/12/23 Javascript
鼠标经过出现气泡框的简单实例
2017/03/17 Javascript
vue 2.0项目中如何引入element-ui详解
2017/09/06 Javascript
jQuery UI 实例讲解 - 日期选择器(Datepicker)
2017/09/18 jQuery
antd vue table跨行合并单元格,并且自定义内容实例
2020/10/28 Javascript
element el-table表格的二次封装实现(附表格高度自适应)
2021/01/19 Javascript
利用python获得时间的实例说明
2013/03/25 Python
python使用xpath中遇到:到底是什么?
2018/01/04 Python
Python实现的朴素贝叶斯分类器示例
2018/01/06 Python
将python代码和注释分离的方法
2018/04/21 Python
python中将zip压缩包转为gz.tar的方法
2018/10/18 Python
django+mysql的使用示例
2018/11/23 Python
python中sort和sorted排序的实例方法
2019/08/26 Python
python实现井字棋小游戏
2020/03/04 Python
在html页面中取得session中的值的方法
2020/08/11 HTML / CSS
YOOX美国官方网站:全球著名的多品牌时尚网络概念店
2016/09/11 全球购物
英国最大的线上保健品零售商之一:Vitamin Planet
2016/12/01 全球购物
汉语言文学职业规划
2014/02/14 职场文书
个人承诺书
2014/03/26 职场文书
分公司经理任命书
2014/06/05 职场文书
党员群众路线剖析材料
2014/10/08 职场文书
初三毕业评语
2014/12/26 职场文书
入党转正介绍人意见
2015/06/03 职场文书
话题作文之呼唤
2019/12/18 职场文书
Nginx报404错误的详细解决方法
2022/07/23 Servers