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

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()

})

}

})

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

then 微信小程序_微信小程序 引入es6 promise相关推荐

  1. 如何微信链接自定义_微信链接自定义

    微信在分享第三方网站是不显示缩略图和描述的,如下图所示 微信链接自定义_微信链接自定义 要解决这个问题必须调用微信JS-SDK接口,下面讲一下如何调用接口. 第一部分 准备步骤 注册微信公众号. 通过 ...

  2. webview 个人小程序_微信小程序新增Webview它是什么东西?

    原标题:微信小程序新增Webview,它是什么东西? 今天刚刚给客户做完案子,正准备去睡觉.2017 今天刚刚给客户做完案子,正准备去睡觉.2017年11月3日 11:29看到了微信公众平台推送的小程 ...

  3. input ios问题 小程序_微信小程序开发常见问题汇总

    原标题:微信小程序开发常见问题汇总 1.域名必须是https 非https的域名不被微信小程序允许. 2.input组件placeholder字体颜色 卸载placeholder-class里面的co ...

  4. mysql传数据到微信小程序_微信小程序直播 数据同步与转存

    本文已同步到专业技术网站 www.sufaith.com, 该网站专注于前后端开发技术与经验分享, 包含Web开发.Nodejs.Python.Linux.IT资讯等板块. 本教程所用项目框架为egg ...

  5. then 微信小程序_微信小程序和es6 promise的关系

    微信小程序上线一年多了,大家的项目都在不断迭代.已经不是小程序,这时候就会遇到多层回调嵌套的问题.有些目不忍视了,迫不得已引入es6-promise,在微信小程序内测的时候promise不需要手动引入 ...

  6. qml如何发布程序_微信小程序如何发布?公司和个人注册流程科普

    如今制作微信小程序已经是非常简单的事了,即使是完全不懂技术的小白,也能利用小程序制作工具快速生成小程序,基本上选一个模板就能快速把页面搭建好. 不过,虽然小程序页面搭建很简单,但还有不少人不知道页面搭 ...

  7. ready等方法 微信小程序_微信小程序开发一些经验

    对于微信小程序开发入门,还是比较简单的,只需要具备基本的css+js知识就可以了,成本比较低. 写了小程序和RN之后,有一种原生很笨重的感觉,就是小程序或者是RN等这些新的开发方式在效率上面真的有比较 ...

  8. ar 微信小程序_微信小程序开放AR功能,全面提升交互体验

    1.什么是AR? AR又称增强现实(Augmented Reality)技术,是一种将虚拟信息与真实世界巧妙融合的技术,广泛运用了多媒体.三维建模.实时跟踪及注册.智能交互.传感等多种技术手段,将计算 ...

  9. 智慧物业小程序_物业小程序物业微信小程序目前功能最全的物业小程序

    原标题:物业小程序物业微信小程序目前功能最全的物业小程序 以物业管理为核心,打造智慧社区云微信小程序管理平台,已入驻腾讯海纳社区,物业微信小程序,解决传统物业管理难,乱差的问题,利用微信小程序提供一整 ...

  10. python登录微信pc版_微信PC版2.9.0测试版更新:新增小程序面板

    3月26日讯,近日,腾讯微信团队推送了微信PC版2.9.0的公共测试更新,此次更新增加了不少实用功能,对过往的许多痛点也有所改进,个人非常期待微信2.9.0版本的正式更新. 作为国民级的通讯产品,腾讯 ...

最新文章

  1. android surface 平板,Surface平板能升级安卓4.0吗
  2. 比特币核心(BCE)或许并没有你想象的强大
  3. find指定具体时间参数-newermt
  4. JVM 虚拟机图文详解!真香!秒懂!一点都不难!
  5. sprytabbedpanels.js库之在页面中插入Tabbed Panels
  6. 受检异常 非受检异常_这样设计 Java 异常更优雅,赶紧学
  7. vc6开发一个抓包软件_开发一个软件多少钱?3种软件开发公司报价
  8. ubuntu命令 图片 壁纸_太简单了!1分钟把Win 10 高颜值的开屏锁屏壁纸存储到电脑!...
  9. 11尺寸长宽 iphone_东风日产奇骏垫底!盘点2020年11月销量最大的十款SUV
  10. 国二python考试时间_计算机国二报名每年在几月份
  11. 重装系统显示“安装程序正在应用系统设置“静止不动
  12. 扇贝单词里有计算机英语吗,扇贝单词英语版电脑版
  13. 【自然语言处理】【可解释性】Perturbed Masking:分析和解释BERT的无参数探针
  14. 我的世界服务器退出信息,我的世界模仿他人进入/退出服务器
  15. htmldd隐藏,如何在隐藏“dd”后隐藏“dd”
  16. NLP学院网:李斌NLP关键执行:由谁去给猫挂铃铛?
  17. 【深度学习】医学图像自动分割的评价指标讲解
  18. 135.如何进行离线计算-1
  19. 2017CCF大数据学术会议大数据智能分析分论坛成功举办
  20. Oracle Distilled网站下的TimesTen相关帖子

热门文章

  1. 飞鸽传书计算乘积的聚合函数跑哪去了呢?
  2. Internet Explorer 6 中的 CSS 增强功能
  3. 哪些技能面试经常被问,但实际开发很少用上?
  4. MySQL进阶:从删库到跑路
  5. 两个维护 提升三服务器,王莉霞:以整改成效践行“两个维护”立足“事要解决”抓好“三访结合”...
  6. c语言中怎样变大输出的字符串,C语言。要输入一个超大数比如 111111111111111111111111111111111111111 怎样用字符串数组求各位的和呢?...
  7. caffe与tensorflow框架下卷积的维度计算与一致性证明
  8. windows10环境tensorflow下载安装
  9. Nature | IL-27直接靶向脂肪细胞以促进产热而改善肥胖
  10. 还在担心没有服务器做不了数据分析?这个免费资源看一下!