详解将微信小程序接口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 相关文章推荐
IE浏览器打印的页眉页脚设置解决方法
Dec 08 Javascript
js获取浏览器的可视区域尺寸的实现代码
Nov 30 Javascript
jquery和css3实现的炫酷时尚的菜单导航
Sep 01 Javascript
浅谈javascript中的闭包
May 13 Javascript
JavaScript的面向对象编程基础
Aug 13 Javascript
javascript伸缩型菜单实现代码
Nov 16 Javascript
异步加载JS、CSS代码(推荐)
Jun 15 Javascript
jQuery日程管理插件fullcalendar使用详解
Jan 07 Javascript
利用js的闭包原理做对象封装及调用方法
Apr 07 Javascript
Vue2.0用 watch 观察 prop 变化(不触发)
Sep 08 Javascript
js+css实现打字效果
Jun 24 Javascript
jquery 插件重新绑定的处理方法分析
Nov 23 jQuery
使用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 缓存函数代码
2008/08/27 PHP
PHP中对于浮点型的数据需要用不同的方法解决
2014/03/11 PHP
PHP实现过滤各种HTML标签
2015/05/17 PHP
Zend Framework框架路由机制代码分析
2016/03/22 PHP
jQuery 1.3 和 Validation 验证插件1.5.1
2009/07/09 Javascript
javascript调试说明
2010/06/07 Javascript
裁剪字符串trim()自定义改进版
2013/04/10 Javascript
wap手机图片滑动切换特效无css3元素js脚本编写
2014/07/28 Javascript
js中的事件捕捉模型与冒泡模型实例分析
2015/01/10 Javascript
详解JavaScript中void语句的使用
2015/06/04 Javascript
基于jquery实现一个滚动的分步注册向导-附源码
2015/08/26 Javascript
jQuery操作属性和样式详解
2016/04/13 Javascript
vue.js初学入门教程(2)
2016/11/07 Javascript
ionic环境配置及问题详解
2017/06/27 Javascript
JavaScript实现无刷新上传预览图片功能
2017/08/02 Javascript
vue-router的hooks用法详解
2020/06/08 Javascript
解决ant-design-vue中menu菜单无法默认展开的问题
2020/10/31 Javascript
python基于queue和threading实现多线程下载实例
2014/10/08 Python
Python实现批量读取word中表格信息的方法
2015/07/30 Python
使用Python读写及压缩和解压缩文件的示例
2016/07/08 Python
python 将字符串转换成字典dict的各种方式总结
2018/03/23 Python
python实现NB-IoT模块远程控制
2018/06/20 Python
详解Python中的正则表达式
2018/07/08 Python
Python抽象和自定义类定义与用法示例
2018/08/23 Python
Python实现 版本号对比功能的实例代码
2019/04/18 Python
python生成器/yield协程/gevent写简单的图片下载器功能示例
2019/10/28 Python
Pytorch 多块GPU的使用详解
2019/12/31 Python
浅谈HTML5新增及移除的元素
2016/06/27 HTML / CSS
澳大利亚最受欢迎的美发和美容在线商店:Catwalk
2018/12/12 全球购物
Java面试中常遇到的问题,也是需要注意的几点
2013/08/30 面试题
What's the difference between an interface and abstract class? (接口与抽象类有什么区别)
2012/10/29 面试题
大学运动会入场词
2014/02/22 职场文书
公务员保密承诺书
2014/03/27 职场文书
希特勒的演讲稿
2014/05/23 职场文书
销售竞赛活动方案
2014/08/23 职场文书
2014年检验科工作总结
2014/11/22 职场文书