详解将微信小程序接口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 相关文章推荐
做网页的一些技巧
Feb 01 Javascript
jquery关于页面焦点的定位(文本框获取焦点时改变样式 )
Sep 10 Javascript
js判断登录与否并确定跳转页面的方法
Jan 30 Javascript
微信JSSDK上传图片
Aug 23 Javascript
简单的js计算器实现
Oct 26 Javascript
JS实现快速的导航下拉菜单动画效果附源码下载
Nov 01 Javascript
node.js与C语言 实现遍历文件夹下最大的文件,并输出路径,大小
Jan 20 Javascript
详解Angular2中Input和Output用法及示例
May 21 Javascript
JavaScript实现的可变动态数字键盘控件方式实例代码
Jul 15 Javascript
Node.js 的模块知识汇总
Aug 16 Javascript
Angular入口组件(entry component)与声明式组件的区别详解
Apr 09 Javascript
使用JS代码实现俄罗斯方块游戏
Aug 03 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
虫族 Zerg 热键控制
2020/03/14 星际争霸
一步一步学习PHP(5) 类和对象
2010/02/16 PHP
PHP三元运算符的结合性介绍
2012/01/10 PHP
PHP 修复未正常关闭的HTML标签实现代码(支持嵌套和就近闭合)
2012/06/07 PHP
PHP关于IE下的iframe跨域导致session丢失问题解决方法
2013/10/10 PHP
php异常处理使用示例
2014/02/25 PHP
浅谈本地WAMP环境的搭建
2015/05/13 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
2017/08/31 PHP
把textarea中字符串里含有的回车换行替换成<br>的javascript代码
2007/04/20 Javascript
JS的数组的扩展实例代码
2008/07/09 Javascript
学习JavaScript的最佳方法分享
2011/10/21 Javascript
jquery插件制作 手风琴Panel效果实现
2012/08/17 Javascript
框架页面高度自动刷新的Javascript脚本
2013/11/01 Javascript
简介JavaScript中的getUTCFullYear()方法的使用
2015/06/10 Javascript
JS模拟按钮点击功能的方法
2015/12/22 Javascript
jQuery插件开发精品教程让你的jQuery提升一个台阶
2016/01/27 Javascript
原生js仿jquery一些常用方法(必看篇)
2016/09/20 Javascript
Bootstrap与Angularjs的模态框实例代码
2017/08/03 Javascript
简单明了区分escape、encodeURI和encodeURIComponent
2018/05/26 Javascript
详解angular应用容器化部署
2018/08/14 Javascript
JS动画实现回调地狱promise的实例代码详解
2018/11/08 Javascript
浅谈Vue的响应式原理
2019/05/30 Javascript
vue中v-show和v-if的异同及v-show用法
2019/06/06 Javascript
Python中音频处理库pydub的使用教程
2017/06/07 Python
Python面向对象程序设计之类的定义与继承简单示例
2019/03/18 Python
在Python中过滤Windows文件名中的非法字符方法
2019/06/10 Python
python实现全排列代码(回溯、深度优先搜索)
2020/02/26 Python
Python sublime安装及配置过程详解
2020/06/29 Python
巴基斯坦电子产品购物网站:Home Shopping
2017/09/14 全球购物
Kivari官网:在线购买波西米亚服装
2018/10/29 全球购物
美国在线购买和出售礼品卡网站:EJ Gift Cards
2019/06/09 全球购物
乐高瑞士官方商店:LEGO CH
2020/08/16 全球购物
说出ArrayList,Vector, LinkedList的存储性能和特性
2015/01/04 面试题
信息部岗位职责
2013/11/12 职场文书
另类冲刺标语
2014/06/24 职场文书
MySQL数据库完全卸载的方法
2022/03/03 MySQL