微信小程序开发两个月了。大家的项目都在不断迭代。已经不是小程序。这时候就会遇到多层回调嵌套的问题。有些目不忍视了。迫不得已引入es6-promise。在微信小程序内测的时候承诺不需要手动引入,后来被微信移除了。看看效果。
, var=需要承诺(“. ./插件/es6-promise.js”) 函数wxPromisify (fn) { 返回函数(obj={}) { 返回新的承诺((解决,拒绝)=比;{ obj。成功=function (res) {//成功 解决(res) } obj。失败=函数(res) {//失败 拒绝(res) } fn (obj) }) } }//无论承诺对象最后状态如何都会执行 Promise.prototype。最后=函数(回调){ 让P=this.constructor; 返回this.then ( 值=https://www.yisu.com/zixun/> P.resolve(回调())(()=>值), 原因=> P.resolve(回调())(()=>{}把原因) ); };/* * *微信请求得到方法 * url *数据以对象的格式传入 */函数getRequest (url、数据){ var getRequest=wxPromisify (wx.request) 返回getRequest ({ url: url、 方法:“得到”, 数据:数据, 标题:{ “内容类型”:“application/json” } }) }/* * *微信请求发布方法封装 * url *数据以对象的格式传入 */函数postRequest (url、数据){ var postRequest=wxPromisify (wx.request) 返回postRequest ({ url: url、 方法:“文章”, 数据:数据, 标题:{ “内容类型”:“应用程序/x-www-form-urlencoded” }, }) } 模块。出口={ postRequest: postRequest, getRequest: getRequest } >之前
var=需要承诺(“. ./插件/es6-promise.js”) 函数wxPromisify (fn) { 返回函数(obj={}) { 返回新的承诺((解决,拒绝)=比;{ obj。成功=function (res) {//成功 解决(res) } obj。失败=函数(res) {//失败 拒绝(res) } fn (obj) }) } }//无论承诺对象最后状态如何都会执行 Promise.prototype。最后=函数(回调){ 让P=this.constructor; 返回this.then ( 值=https://www.yisu.com/zixun/> P.resolve(回调())(()=>值), 原因=> P.resolve(回调())(()=>{}把原因) ); };/* * *微信用户登录,获取代码 */函数wxLogin () { 返回wxPromisify (wx.login) }/* * *获取微信用户信息 *注意:须在登录之后调用 */函数wxGetUserInfo () { 返回wxPromisify (wx.getUserInfo) }/* * *获取系统信息 */函数wxGetSystemInfo () { 返回wxPromisify (wx.getSystemInfo) } 模块。出口={ wxPromisify: wxPromisify, wxLogin: wxLogin, wxGetUserInfo: wxGetUserInfo, wxGetSystemInfo: wxGetSystemInfo } >之前
承诺应用场景很多,下面是承诺最基本的用法,然后在()中returnpromise对象。
这样有效解决了回调嵌套的问题。让代码看起来更优雅。可读性更高。
var util=要求(“. ./. ./跑龙套/util”) var wxApi=要求(“. ./. ./跑龙套/wxApi”) var wxRequest=要求(“. ./. ./跑龙套/wxRequest”) 进口配置“. ./. ./跑龙套/配置”//获取应用实例 应用var=getApp () 页面({ 数据:{ 用户信息:{} }, onLoad:函数(){ var=这个; wx.showToast ({ 标题:“加载中”, 图标:“加载”, 持续时间:10000 })//1 .获取代码 var wxLogin=wxApi.wxLogin () wxLogin ()。然后(res=比;{ console.log(“1。成功了”) console.log (res.code) var url=config.getOpenidUrl; var params={ appid:“wxed7 * * * * * * 2 d465”, 秘密:“e9c5e4c * * * * * * 09 ecc5ebd811”, js_code: res.code, grant_type:“authorization_code” }//2 .获取openid wxRequest返回。getRequest (url参数) })。 然后(res=比;{ console.log(“2。成功了”) console.log (res) var=app.globalData url。ip + config.searchDgUrl var data=https://www.yisu.com/zixun/util.json2Form ({phoneNumber: ' 15971908021 '})//3 .获取绑定手机号码 wxRequest返回。postRequest (url,数据) })。 然后(res=比;{ console.log(“3。成功了”) console.log (res)//4 .获取系统信息 var wxGetSystemInfo=wxApi.wxGetSystemInfo () 返回wxGetSystemInfo () })。 然后(res=比;{ console.log(' 4。成功了”) console.log (res)//5 .获取用户信息 var wxGetUserInfo=wxApi.wxGetUserInfo () 返回wxGetUserInfo () })。 然后(res=比;{ console.log(“5。成功了”) console.log (res.userInfo) that.setData ({ 用户信息:res.userInfo }) }) 最后(函数(res) { console.log(“最后~”) wx.hideToast () }) } })微信小程序引入es6承诺