详解将微信小程序接口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 相关文章推荐
Prototype使用指南之selector.js
Jan 10 Javascript
javascript 词法作用域和闭包分析说明
Aug 12 Javascript
JQuery给元素添加/删除节点比如select
Apr 02 Javascript
原生javascript图片自动或手动切换示例附演示源码
Sep 04 Javascript
jQuery实现tab选项卡效果的方法
Jul 08 Javascript
分享15个大家都熟知的jquery小技巧
Dec 02 Javascript
bootstrap快速制作后台界面
Dec 05 Javascript
JS实现含有中文字符串的友好截取功能分析
Mar 13 Javascript
微信小程序自定义弹窗wcPop插件
Nov 19 Javascript
layui 监听select选择 获取当前select的ID名称方法
Sep 24 Javascript
Ant Design Pro 下实现文件下载的实现代码
Dec 03 Javascript
Javascript实现单选框效果
Dec 09 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/03 咖啡文化
PHP 实用代码收集
2010/01/22 PHP
PHP的一个基础知识 表单提交
2011/07/04 PHP
Apache PHP MySql安装配置图文教程
2016/08/27 PHP
Zend Framework框架实现类似Google搜索分页效果
2016/11/25 PHP
利用PHP访问MySql数据库的逻辑操作以及增删改查的实例讲解
2017/08/30 PHP
Laravel如何同时连接多个数据库详解
2019/08/13 PHP
jquery实现textarea输入字符控制(仿微博输入控制字符)
2013/04/26 Javascript
利用JavaScript判断浏览器类型及版本
2016/08/23 Javascript
BootstrapValidator不触发校验的实现代码
2016/09/28 Javascript
使用Javascript判断浏览器终端设备(PC、IOS(iphone)、Android)
2017/01/04 Javascript
微信小程序 图片宽高自适应详解
2017/05/11 Javascript
Node.js环境下Koa2添加travis ci持续集成工具的方法
2017/06/19 Javascript
微信小程序 本地图片按照屏幕尺寸处理
2017/08/04 Javascript
原生js实现抽奖小游戏
2019/06/27 Javascript
ES6 Iterator遍历器原理,应用场景及相关常用知识拓展详解
2020/02/15 Javascript
Vue获取微博授权URL代码实例
2020/11/04 Javascript
简单的Python的curses库使用教程
2015/04/11 Python
Python列表list内建函数用法实例分析【insert、remove、index、pop等】
2017/07/24 Python
python取代netcat过程分析
2018/02/10 Python
Python 最大概率法进行汉语切分的方法
2018/12/14 Python
简单了解python反射机制的一些知识
2019/07/13 Python
python re.sub()替换正则的匹配内容方法
2019/07/22 Python
PyCharm2019安装教程及其使用(图文教程)
2019/09/29 Python
使用pyhon绘图比较两个手机屏幕大小(实例代码)
2020/01/03 Python
python如何判断IP地址合法性
2020/04/05 Python
Python参数传递机制传值和传引用原理详解
2020/05/22 Python
CSS3解决移动页面上点击链接触发色块的问题
2016/06/03 HTML / CSS
英国蛋糕装饰用品一站式商店:Craft Company
2019/03/18 全球购物
合作协议书范文
2014/08/20 职场文书
北京离婚协议书范文2014
2014/09/29 职场文书
护士医德考评自我评价
2015/03/03 职场文书
2015年共青团工作总结
2015/05/15 职场文书
运动会200米广播稿
2015/08/19 职场文书
只需要12页,掌握撰写一流商业计划书的技巧
2019/05/07 职场文书
总结Java对象被序列化的两种方法
2021/06/30 Java/Android