微信小程序里解决app.js onLaunch事件与小程序页面的onLoad加载前后异常问题
使用 Promise 解决小程序页面因为需要app.js onLaunch 参数导致的请求失败
app.js onLaunch 的代码
1 "use strict"; 2 Object.defineProperty(exports, "__esModule", { 3 value: true 4 }); 5 const http = require('./utils/http.js'); 6 const api = require('./config.js'); 7 const updateManager = wx.getUpdateManager(); 8 9 App({ 10 onLaunch: function() { 11 updateManager.onCheckForUpdate(function(res) { 12 // 请求完新版本信息的回调 13 console.log('请求完新版本信息的回调'); 14 console.log(res.hasUpdate) 15 }) 16 17 updateManager.onUpdateReady(function() { 18 wx.showModal({ 19 title: '更新提示', 20 content: '新版本已经准备好,是否重启应用?', 21 success(res) { 22 if (res.confirm) { 23 // 新的版本已经下载好,调用 applyUpdate 应用新版本并重启 24 updateManager.applyUpdate() 25 } 26 } 27 }) 28 }) 29 30 updateManager.onUpdateFailed(function() { 31 // 新版本下载失败 32 wx.showModal({ 33 title: '提示', 34 content: '新版本下载失败', 35 showCancel: false 36 }) 37 }) 38 var _this = this; 39 _this.GetSystemInfo(); 40 // _this.toLogin(); 41 42 43 }, 44 globalData: { 45 screenWidth: 0, //屏幕宽度 46 screenHeight: 0, //屏幕高度 47 fontSize: 14, //字体大小 48 openid: '', 49 phone: '', 50 shopid: '', //没有openid 退出 51 logined: false, //是否已经获取了手机号 52 nickname: '', //昵称 53 photo: '', //头像 54 editJobStorageKey: 'edit-job-storage', //编辑职能(角色)的缓存 55 isbindrole: false, //是否已经绑定了职能(角色) 56 rolenumber: '', //职能编号 57 rolename: '', //职能名称 58 shopname: '', 59 func_modular: '', //功能模块权限 60 branchListStorageKey: 'branch-list-storage', //门店列表 61 branchCityListStorageKey: 'branch-city-list-storage', //门店城市列表 62 auth_num: 0, //可授权使用人数 63 productname: '', //线下产品名称 64 adminid: 0, //管理员或者店员的id 65 }, 66 GetSystemInfo: function() { 67 var _this = this; 68 const info = wx.getSystemInfoSync(); 69 _this.globalData.screenWidth = info.screenWidth; 70 _this.globalData.screenHeight = info.screenHeight; 71 _this.globalData.fontSize = info.fontSizeSetting; 72 }, 73 74 75 76 //首次登录 不存在shopid 77 toLogin: function() { 78 console.log('启动页'); 79 var _this = this; 80 return new Promise(function(resolve, reject) { 81 wx.login({ 82 success: function(res) { 83 var code = res.code; 84 console.log(res); 85 var postData = { 86 code: code, 87 shopid: _this.globalData.shopid 88 }; 89 wx.showLoading({ 90 title: '登录中...', 91 }) 92 http.httpPost(api.Login, postData, function(result) { 93 console.log(result); 94 wx.hideLoading(); 95 if (result.success) { 96 if (result.result.success) { 97 _this.globalData.openid = result.result.data.openid; 98 if (result.result.data.phone) { 99 _this.globalData.phone = result.result.data.phone; 100 } 101 if (result.result.data.photo) { 102 _this.globalData.photo = result.result.data.photo; 103 } 104 if (result.result.data.nickname) { 105 _this.globalData.nickname = result.result.data.nickname; 106 } 107 108 //存在多个商户号时 109 if (result.result.data.shopidlist && result.result.data.shopidlist.length > 0) { 110 //只返回一个时,查询当前用户绑定角色职能关系 111 if (result.result.data.shopidlist.length == 1) { 112 _this.globalData.shopid = result.result.data.shopidlist[0]; 113 _this.toGetBranchList(); 114 _this.toGetUserRole(); 115 _this.toGetShopInfo(); 116 } else { 117 // 存在多个商户号时,跳转到选择商户页面 118 wx.redirectTo({ 119 url: '../../pages/shoplist/shoplist', 120 }) 121 } 122 } else { 123 _this.globalData.isbindrole = false; 124 _this.globalData.rolenumber = ''; 125 _this.globalData.rolename = ''; 126 } 127 128 resolve(result); 129 130 } else { 131 wx.showModal({ 132 title: '提示', 133 content: result.success.message, 134 showCancel: false 135 }) 136 reject('error'); 137 } 138 } else { 139 wx.showModal({ 140 title: '提示', 141 content: result.error.message, 142 showCancel: false 143 }) 144 reject('error'); 145 } 146 }) 147 } 148 }); 149 150 }); 151 152 }, 153 //获取门店列表 154 toGetBranchList: function() { 155 var _this = this; 156 var postData = { 157 'shopid': _this.globalData.shopid, 158 'from': 'wxapp', 159 'openid': _this.globalData.openid 160 }; 161 http.httpPost(api.ObtainBranchList, postData, (res) => { 162 163 if (res.success) { 164 var _result = res.result; 165 if (_result.success) { 166 var branchList = _result.data; 167 var branchNameList = ['全部门店']; 168 for (var i = 0; i < branchList.length; i++) { 169 branchNameList.push(branchList[i].branch_name); 170 } 171 172 wx.setStorageSync(_this.globalData.branchListStorageKey, branchList); 173 wx.setStorageSync(_this.globalData.branchCityListStorageKey, branchNameList) 174 175 } else { 176 wx.showModal({ 177 title: '提示', 178 content: _result.message, 179 showCancel: false 180 }) 181 } 182 } else { 183 wx.showModal({ 184 title: '提示', 185 content: res.error.message, 186 showCancel: false 187 }) 188 } 189 }); 190 }, 191 toGetShopInfo: function() { 192 var _this = this; 193 var postData = { 194 'shopid': _this.globalData.shopid 195 }; 196 http.httpPost(api.GetShopInfo, postData, (res) => { 197 198 if (res.success) { 199 var _result = res.result; 200 if (_result.success) { 201 _this.globalData.shopname = _result.data.shopname; 202 _this.globalData.productname = _result.data.product; 203 _this.globalData.auth_num = _result.data.auth_num; 204 205 } else { 206 wx.showModal({ 207 title: '提示', 208 content: _result.message, 209 showCancel: false 210 }) 211 } 212 } else { 213 wx.showModal({ 214 title: '提示', 215 content: res.error.message, 216 showCancel: false 217 }) 218 } 219 220 }); 221 }, 222 223 //获取用户的绑定职能角色 224 toGetUserRole: function() { 225 var _this = this; 226 var postData = { 227 'shopid': _this.globalData.shopid, 228 'openid': _this.globalData.openid 229 }; 230 http.httpPost(api.ObtainUserRole, postData, function(res) { 231 console.log(res); 232 if (res.success) { 233 var _result = res.result; 234 if (_result.success) { 235 _this.globalData.isbindrole = true; 236 _this.globalData.rolenumber = _result.data.rolenumber; 237 _this.globalData.rolename = _result.data.rolename; 238 _this.globalData.adminid = _result.data.adminid; 239 if (_result.data.rolenumber != 'admin') { 240 _this.globalData.func_modular = _result.data.func_list 241 } 242 } else { 243 _this.globalData.isbindrole = false; 244 _this.globalData.rolenumber = ''; 245 _this.globalData.rolename = ''; 246 wx.showModal({ 247 title: '提示', 248 content: _result.message, 249 showCancel: false 250 }) 251 } 252 } else { 253 wx.showModal({ 254 title: '提示', 255 content: res.error.message, 256 showCancel: false 257 }) 258 } 259 }); 260 } 261 });
小程序页面的代码 onlaod的事件得写在 Promise 的then方法里
1 onLoad: function() { 2 3 var _this = this; 4 app.toLogin().then(function(res) { 5 console.log('登录后'); 6 console.log(res); 7 if (app.globalData.shopid) { 8 _this.toGetKanBanData(); 9 _this.toGetSaleDetail(); 10 _this.toGuestOrderDetail(); 11 } 12 }); 13 14 },