详解将微信小程序接口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 相关文章推荐
一个多次搜索+多次传值的解决方案
Jan 20 Javascript
javascript 构造函数方式定义对象
Jan 02 Javascript
jQuery实现图片文字淡入淡出效果
Dec 21 Javascript
jQuery中JSONP的两种实现方式详解
Sep 26 Javascript
纯原生js实现table表格的增删
Jan 05 Javascript
Vue.js中extend选项和delimiters选项的比较
Jul 17 Javascript
Vue中v-for的数据分组实例
Mar 07 Javascript
分享vue里swiper的一些坑
Aug 30 Javascript
axios对请求各种异常情况处理的封装方法
Sep 25 Javascript
Vue程序调试的方法
Jun 17 Javascript
jquery图片预览插件实现方法详解
Jul 18 jQuery
javascript设计模式 ? 模板方法模式原理与用法实例分析
Apr 23 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 面向对象的一个例子
2011/04/12 PHP
php计划任务之验证是否有多个进程调用同一个job的方法
2015/12/07 PHP
PHP用FTP类上传文件视频等的简单实现方法
2016/09/23 PHP
PHP中递归的实现实例详解
2017/11/14 PHP
Thinkphp自定义生成缩略图尺寸的方法
2019/08/05 PHP
一端时间轮换的广告
2006/06/26 Javascript
关于event.cancelBubble和event.stopPropagation()的区别介绍
2011/12/11 Javascript
js截取字符串的两种方法及区别详解
2013/11/05 Javascript
js动态控制table的tr、td增加及删除的具体实现
2014/04/30 Javascript
transport.js和jquery冲突问题的解决方法
2015/02/10 Javascript
JavaScript 匿名函数和闭包介绍
2015/04/13 Javascript
Jquery-1.9.1源码分析系列(十一)之DOM操作
2015/11/25 Javascript
jQuery中选择器的基础使用教程
2016/05/23 Javascript
浅谈js函数中的实例对象、类对象、局部变量(局部函数)
2016/11/20 Javascript
ionic2自定义cordova插件开发以及使用(Android)
2017/06/19 Javascript
Vue-router结合transition实现app前进后退动画切换效果的实例
2017/10/11 Javascript
使vue实现jQuery调用的两种方法
2019/05/12 jQuery
JS中的算法与数据结构之二叉查找树(Binary Sort Tree)实例详解
2019/08/16 Javascript
[01:15:00]LGD vs Mineski Supermajor 胜者组 BO3 第一场 6.5
2018/06/06 DOTA
python中常用的各种数据库操作模块和连接实例
2014/05/29 Python
python登陆asp网站页面的实现代码
2015/01/14 Python
Python面向对象编程基础解析(二)
2017/10/26 Python
Python使用Matplotlib实现Logos设计代码
2017/12/25 Python
基于Python3.6+splinter实现自动抢火车票
2018/09/25 Python
Tesserocr库的正确安装方式
2018/10/19 Python
一款纯css3实现的圆形旋转分享按钮旋转角度可自己调整
2014/09/02 HTML / CSS
英国邮购活的植物主要供应商:Gardening Direct
2019/01/28 全球购物
拉歌口号大全
2014/06/13 职场文书
小学关爱留守儿童活动方案
2014/08/25 职场文书
读后感作文评语
2014/12/25 职场文书
同学会邀请函模板
2015/01/30 职场文书
酒桌上的开场白
2015/06/01 职场文书
环保建议书作文400字
2015/09/14 职场文书
2016年中学清明节活动总结
2016/04/01 职场文书
nginx对http请求处理的各个阶段详析
2021/03/31 Servers
基于python制作简易版学生信息管理系统
2021/04/20 Python