微信小程序 引入es6 promise


Posted in Javascript onApril 12, 2017

微信小程序开发两个月了.大家的项目都在不断迭代.已经不是小程序.这时候就会遇到多层回调嵌套的问题.有些目不忍视了.迫不得已引入es6-promise.在微信小程序内测的时候promise不需要手动引入,后来被微信移除了.看看效果.

 微信小程序 引入es6 promise

promise详细的介绍我就不说了.有很多大神写过.

看看目录,引入es6-promise就可以用了.

 微信小程序 引入es6 promise

目录

1.网络请求 wxRequest.js

这里只写了get和post.

我经常会在网络请求的时候用微信原生showToast(),所以最后加了finally,方便hideToast()

var Promise = require('../plugins/es6-promise.js')

function wxPromisify(fn) {
 return function (obj = {}) {
 return new Promise((resolve, reject) => {
 obj.success = function (res) {
 //成功
 resolve(res)
 }
 obj.fail = function (res) {
 //失败
 reject(res)
 }
 fn(obj)
 })
 }
}
//无论promise对象最后状态如何都会执行
Promise.prototype.finally = function (callback) {
 let P = this.constructor;
 return this.then(
 value => P.resolve(callback()).then(() => value),
 reason => P.resolve(callback()).then(() => { throw reason })
 );
};
/**
 * 微信请求get方法
 * url
 * data 以对象的格式传入
 */
function getRequest(url, data) {
 var getRequest = wxPromisify(wx.request)
 return getRequest({
 url: url,
 method: 'GET',
 data: data,
 header: {
 'Content-Type': 'application/json'
 }
 })
}

/**
 * 微信请求post方法封装
 * url
 * data 以对象的格式传入
 */
function postRequest(url, data) {
 var postRequest = wxPromisify(wx.request)
 return postRequest({
 url: url,
 method: 'POST',
 data: data,
 header: {
 "content-type": "application/x-www-form-urlencoded"
 },
 })
}

module.exports = {
 postRequest: postRequest,
 getRequest: getRequest
}

2.微信其他API wxApi.js

var Promise = require('../plugins/es6-promise.js')

function wxPromisify(fn) {
 return function (obj = {}) {
 return new Promise((resolve, reject) => {
 obj.success = function (res) {
 //成功
 resolve(res)
 }
 obj.fail = function (res) {
 //失败
 reject(res)
 }
 fn(obj)
 })
 }
}
//无论promise对象最后状态如何都会执行
Promise.prototype.finally = function (callback) {
 let P = this.constructor;
 return this.then(
 value => P.resolve(callback()).then(() => value),
 reason => P.resolve(callback()).then(() => { throw reason })
 );
};
/**
 * 微信用户登录,获取code
 */
function wxLogin() {
 return wxPromisify(wx.login)
}
/**
 * 获取微信用户信息
 * 注意:须在登录之后调用
 */
function wxGetUserInfo() {
 return wxPromisify(wx.getUserInfo)
}
/**
 * 获取系统信息
 */
function wxGetSystemInfo() {
 return wxPromisify(wx.getSystemInfo)
}
module.exports = {
 wxPromisify: wxPromisify,
 wxLogin: wxLogin,
 wxGetUserInfo: wxGetUserInfo,
 wxGetSystemInfo: wxGetSystemInfo
}

3.用法

promise应用场景很多,下面是promise最基本的用法,在then()中returnpromise对象.

这样有效解决了回调嵌套的问题.让代码看起来更优雅.可读性更高.

var util = require('../../utils/util')
var wxApi = require('../../utils/wxApi')
var wxRequest = require('../../utils/wxRequest')
import config from '../../utils/config'
//获取应用实例
var app = getApp()
Page({
 data: {
 userInfo: {}
 },
 onLoad: function () {
 var that = this;
 wx.showToast({
 title: '加载中',
 icon: 'loading',
 duration: 10000
 })
 //1.获取code
 var wxLogin = wxApi.wxLogin()
 wxLogin().then(res => {
 console.log('1.成功了')
 console.log(res.code)
 var url = config.getOpenidUrl;
 var params = {
 appid: "wxed7******2d465",
 secret: "e9c5e4c******09ecc5ebd811",
 js_code: res.code,
 grant_type: "authorization_code"
 }
 //2.获取openid
 return wxRequest.getRequest(url, params)
 }).
 then(res => {
 console.log('2.成功了')
 console.log(res)
 var url = app.globalData.ip + config.searchDgUrl
 var data = util.json2Form({ phoneNumber: '15971908021' })
 //3.获取绑定手机号码
 return wxRequest.postRequest(url, data)
 }).
 then(res => {
 console.log('3.成功了')
 console.log(res)
 //4.获取系统信息
 var wxGetSystemInfo = wxApi.wxGetSystemInfo()
 return wxGetSystemInfo()
 }).
 then(res => {
 console.log('4.成功了')
 console.log(res)
 //5.获取用户信息
 var wxGetUserInfo = wxApi.wxGetUserInfo()
 return wxGetUserInfo()
 }).
 then(res => {
 console.log('5.成功了')
 console.log(res.userInfo)
 that.setData({
  userInfo: res.userInfo
 })
 })
 .finally(function (res) {
 console.log('finally~')
 wx.hideToast()
 })
 }
})

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
jQuery UI 应用不同Theme的办法
Sep 12 Javascript
关于jQuery $.isNumeric vs. $.isNaN vs. isNaN
Apr 15 Javascript
node.js中的path.normalize方法使用说明
Dec 08 Javascript
jQuery中each()方法用法实例
Dec 27 Javascript
深入分析Cookie的安全性问题
Mar 01 Javascript
自定义jQuery插件方式实现强制对象重绘的方法
Mar 23 Javascript
原生js和jquery实现图片轮播淡入淡出效果
Apr 23 Javascript
详解JavaScript中jQuery和Ajax以及JSONP的联合使用
Aug 13 Javascript
jQuery中的AjaxSubmit使用讲解
Sep 25 Javascript
通过V8源码看一个关于JS数组排序的诡异问题
Aug 14 Javascript
layui表格数据重载
Jul 27 Javascript
Javascript实现简易天数计算器
May 18 Javascript
JavaScript队列的应用实例详解【经典数据结构】
Apr 12 #Javascript
Vue 实用分页paging实例代码
Apr 12 #Javascript
jquery 校验中国身份证号码实例详解
Apr 11 #jQuery
基于JavaScript定位当前的地理位置
Apr 11 #Javascript
js模拟支付宝密码输入框
Apr 11 #Javascript
基于jQuery实现瀑布流页面
Apr 11 #jQuery
详解angular用$sce服务来过滤HTML标签
Apr 11 #Javascript
You might like
动画 《Pokemon Sword·Shield》系列WEB动画《薄明之翼》第2话声优阵容公开!
2020/03/06 日漫
PHP中Date()时间日期函数的使用方法小结
2011/04/20 PHP
php判断当前操作系统类型
2015/10/28 PHP
thinkphp配置文件路径的实现方法
2016/08/30 PHP
通过PHP实现用户注册后邮箱验证激活
2020/11/10 PHP
jquery select(列表)的操作(取值/赋值)
2011/03/16 Javascript
ExtJs纵坐标值重复问题的解决方法
2014/02/27 Javascript
Jquery选择器中使用变量实现动态选择例子
2014/07/25 Javascript
js读取cookie方法总结
2014/10/31 Javascript
浅析JavaScript中break、continue和return的区别
2016/11/30 Javascript
使用canvas及js简单生成验证码方法
2017/04/02 Javascript
vue todo-list组件发布到npm上的方法
2018/04/04 Javascript
详解vue中axios的封装
2018/07/18 Javascript
对angularJs中2种自定义服务的实例讲解
2018/09/30 Javascript
node 版本切换的实现
2020/02/02 Javascript
vue 获取url里参数的两种方法小结
2020/11/12 Javascript
[01:59]游戏“zheng”当时试玩会
2019/08/21 DOTA
web.py在模板中输出美元符号的方法
2014/08/26 Python
python最小生成树kruskal与prim算法详解
2019/01/17 Python
Python实现多线程/多进程的TCP服务器
2019/09/03 Python
PyQt使用QPropertyAnimation开发简单动画
2020/04/02 Python
python根据字典的键来删除元素的方法
2020/08/16 Python
基于python实现图片转字符画代码实例
2020/09/04 Python
通过代码实例了解Python3编程技巧
2020/10/13 Python
html2canvas生成的图片偏移不完整的解决方法
2020/05/19 HTML / CSS
澳大利亚吉他在线:Artist Guitars
2017/03/30 全球购物
美国职棒大联盟官方网上商店:MLBShop.com
2017/11/12 全球购物
英国办公用品商店:Office Outlet
2018/04/04 全球购物
June Jacobs尊积帕官网:知名的spa水疗护肤品牌
2019/03/21 全球购物
什么是Web Service?
2012/07/25 面试题
英语教师岗位职责
2014/03/16 职场文书
小学生学雷锋演讲稿
2014/04/25 职场文书
中小学校园安全广播稿
2014/09/29 职场文书
公民授权委托书
2014/10/15 职场文书
党员民主评议自我评价
2014/10/20 职场文书
学生违纪检讨书200字
2014/10/21 职场文书