详解将微信小程序接口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 相关文章推荐
超简单的jquery的AJAX用法
May 10 Javascript
JavaScript高级程序设计 扩展--关于动态原型
Nov 09 Javascript
屏蔽IE弹出"您查看的网页正在试图关闭窗口,是否关闭此窗口"的方法
Dec 31 Javascript
JavaScript数组去重的两种方法推荐
Apr 05 Javascript
Jquery删除css属性的简单方法
Dec 04 Javascript
Vue.js实现在下拉列表区域外点击即可关闭下拉列表的功能(自定义下拉列表)
May 30 Javascript
详解在Angular项目中添加插件ng-bootstrap
Jul 04 Javascript
Vue2.0设置全局样式(less/sass和css)
Nov 18 Javascript
jQuery动态移除与增加onclick属性的方法详解
Jun 07 jQuery
微信小程序扫描二维码获取信息实例详解
May 07 Javascript
vant picker+popup 自定义三级联动案例
Nov 04 Javascript
【js设计模式】SOLID五大设计原则
Mar 24 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
Gregarius中文日期格式问题解决办法
2008/04/22 PHP
批量获取memcache值并按key的顺序返回的实现代码
2011/06/14 PHP
教你如何开启shopnc b2b2c 伪静态
2014/10/21 PHP
PHP的简单跳转提示的实现详解
2019/03/14 PHP
JavaScript的Cookies
2008/01/16 Javascript
基于JQuery的多标签实现代码
2012/09/19 Javascript
js控制表单奇偶行样式的简单方法
2013/07/31 Javascript
js和jquery使按钮失效为不可用状态的方法
2014/01/26 Javascript
基于jQuery实现点击弹出层实例代码
2016/01/01 Javascript
javascript 数组的定义和数组的长度
2016/06/07 Javascript
ros::spin() 和 ros::spinOnce()函数的区别及详解
2016/10/01 Javascript
利用JQuery实现datatables插件的增加和删除行功能
2017/01/06 Javascript
Javascript 详解封装from表单数据为json串进行ajax提交
2017/03/29 Javascript
vue动态路由配置及路由传参的方式
2018/05/23 Javascript
jQuery添加新内容的四个常用方法分析【append,prepend,after,before】
2019/03/19 jQuery
vue 项目 iOS WKWebView 加载
2019/04/17 Javascript
Angular 2使用路由自定义弹出组件toast操作示例
2019/05/10 Javascript
vue利用全局导航守卫作登录后跳转到未登录前指定页面的实例代码
2020/05/19 Javascript
[01:34]完美“圣”典宣传片震撼发布,12.17与你不见不散
2016/12/16 DOTA
[58:09]Spirit vs NB Supermajor小组赛 A组败者组决赛 BO3 第三场 6.2
2018/06/03 DOTA
Python按行读取文件的简单实现方法
2016/06/22 Python
Python操作使用MySQL数据库的实例代码
2017/05/25 Python
Python实现霍夫圆和椭圆变换代码详解
2018/01/12 Python
Python subprocess模块详细解读
2018/01/29 Python
Python cookbook(数据结构与算法)让字典保持有序的方法
2018/02/18 Python
django将网络中的图片,保存成model中的ImageField的实例
2019/08/07 Python
感知器基础原理及python实现过程详解
2019/09/30 Python
Python通过文本和图片生成词云图
2020/05/21 Python
Python实现定时监测网站运行状态的示例代码
2020/09/30 Python
CSS3弹性盒模型开发笔记(一)
2016/04/26 HTML / CSS
美国领先的家居装饰和礼品商店:Kirkland’s
2017/01/30 全球购物
APM Monaco中国官网:来自摩纳哥珠宝品牌
2017/12/27 全球购物
办公用房租赁协议书
2014/11/29 职场文书
公司给客户的感谢信
2015/01/23 职场文书
整改通知书格式
2015/04/22 职场文书
Nginx的基本概念和原理
2022/03/21 Servers