微信小程序里解决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 App({
  8   onLaunch: function() {
  9     var _this = this;
 10     _this.GetSystemInfo();
 11     if (!_this.globalData.openid) {
 12       _this.toLogin();
 13     }
 14
 15
 16   },
 17   globalData: {
 18     screenWidth: 0, //屏幕宽度
 19     screenHeight: 0, //屏幕高度
 20     fontSize: 14, //字体大小
 21     openid: ‘‘,
 22     phone: ‘‘,
 23     shopid: ‘‘, //没有openid 退出
 24     logined: false, //是否已经获取了手机号
 25     nickname: ‘‘, //昵称
 26     photo: ‘‘, //头像
 27     editJobStorageKey: ‘edit-job-storage‘, //编辑职能(角色)的缓存
 28     isbindrole: false, //是否已经绑定了职能(角色)
 29     rolenumber: ‘‘, //职能编号
 30     rolename: ‘‘, //职能名称
 31     shopname: ‘‘,
 32     branchListStorageKey: ‘branch-list-storage‘, //门店列表
 33     branchCityListStorageKey: ‘branch-city-list-storage‘, //门店城市列表
 34     auth_num: 0, //可授权使用人数
 35     productname: ‘‘, //线下产品名称
 36   },
 37   GetSystemInfo: function() {
 38     var _this = this;
 39     const info = wx.getSystemInfoSync();
 40     _this.globalData.screenWidth = info.screenWidth;
 41     _this.globalData.screenHeight = info.screenHeight;
 42     _this.globalData.fontSize = info.fontSizeSetting;
 43   },
 44
 45
 46
 47   //首次登录  不存在shopid
 48   toLogin: function() {
 49     console.log(‘启动页LOGIN‘);
 50     var _this = this;
 51     return new Promise(function(resolve, reject) {
 52       wx.login({
 53         success: function(res) {
 54           var code = res.code;
 55           console.log(res);
 56           var postData = {
 57             code: code,
 58             shopid: _this.globalData.shopid
 59           };
 60           wx.showLoading({
 61             title: ‘登录中...‘,
 62           })
 63           http.httpPost(api.Login, postData, function(result) {
 64             console.log(result);
 65             wx.hideLoading();
 66             if (result.success) {
 67               if (result.result.success) {
 68                 _this.globalData.openid = result.result.data.openid;
 69                 if (result.result.data.phone) {
 70                   _this.globalData.phone = result.result.data.phone;
 71                 }
 72                 if (result.result.data.photo) {
 73                   _this.globalData.photo = result.result.data.photo;
 74                 }
 75                 if (result.result.data.nickname) {
 76                   _this.globalData.nickname = result.result.data.nickname;
 77                 }
 78
 79                 //存在多个商户号时
 80                 if (result.result.data.shopidlist && result.result.data.shopidlist.length > 0) {
 81                   //只返回一个时,查询当前用户绑定角色职能关系
 82                   if (result.result.data.shopidlist.length == 1) {
 83                     _this.globalData.shopid = result.result.data.shopidlist[0];
 84                     _this.toGetUserRole();
 85                     _this.toGetShopInfo();
 86                   } else {
 87                     //存在多个商户号时,跳转到选择商户页面
 88                     wx.redirectTo({
 89                       url: ‘../../pages/shoplist/shoplist‘,
 90                     })
 91                   }
 92                 } else {
 93                   _this.globalData.isbindrole = false;
 94                   _this.globalData.rolenumber = ‘‘;
 95                   _this.globalData.rolename = ‘‘;
 96                 }
 97
 98                 resolve(result);
 99
100               } else {
101                 wx.showModal({
102                   title: ‘提示‘,
103                   content: result.success.message,
104                 })
105                 reject(‘error‘);
106               }
107             } else {
108               wx.showModal({
109                 title: ‘提示‘,
110                 content: ‘登录失败:‘ + result.error.message,
111               })
112               reject(‘error‘);
113             }
114           })
115         }
116       });
117
118     });
119
120   },
121
122   toGetShopInfo: function() {
123     var _this = this;
124     var postData = {
125       ‘shopid‘: _this.globalData.shopid
126     };
127     http.httpPost(api.GetShopInfo, postData, (res) => {
128       console.log(res);
129       if (res.success) {
130         var _result = res.result;
131         if (_result.success) {
132           _this.globalData.shopname = _result.data.shopname;
133           _this.globalData.productname = _result.data.product;
134           _this.globalData.auth_num = _result.data.auth_num;
135
136         } else {
137           wx.showModal({
138             title: ‘提示‘,
139             content: ‘‘,
140           })
141         }
142       } else {
143         wx.showModal({
144           title: ‘提示‘,
145           content: res.error,
146           showCancel: false
147         })
148       }
149
150     });
151   },
152
153   //获取用户的绑定职能角色
154   toGetUserRole: function() {
155     var _this = this;
156     var postData = {
157       ‘shopid‘: _this.globalData.shopid,
158       ‘openid‘: _this.globalData.openid
159     };
160     http.httpPost(api.ObtainUserRole, postData, function(res) {
161       console.log(res);
162       if (res.success) {
163         var _result = res.result;
164         if (_result.success) {
165           _this.globalData.isbindrole = true;
166           _this.globalData.rolenumber = _result.data.rolenumber;
167           _this.globalData.rolename = _result.data.rolename;
168         } else {
169           _this.globalData.isbindrole = false;
170           _this.globalData.rolenumber = ‘‘;
171           _this.globalData.rolename = ‘‘;
172           wx.showModal({
173             title: ‘提示‘,
174             content: _result.message,
175             showCancel: false
176           })
177         }
178       } else {
179         wx.showModal({
180           title: ‘提示‘,
181           content: res.error,
182           showCancel: false
183         })
184       }
185     });
186   }
187 });

小程序页面的代码 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   },

原文地址:https://www.cnblogs.com/WQ1992/p/10438325.html

时间: 2024-10-19 10:34:58

微信小程序里解决app.js onLaunch事件与小程序页面的onLoad加载前后异常问题的相关文章

Afianl框架里面的FinalBitmap加载网络图片

在Afianl框架里,FinalBitmap如何加载网络图片?有什么简单的方法吗?现在让麦子学院的android开发老师讲讲afina框架里面的finalbitmap加载网络图片的方法,Afinal里边FinalBitmap:用于显现bitmap图像,而无需思考线程并发和oom等疑问. 1.测验恳求 运用页面翻开http://avatar.csdn.net/C/6/8/1_bz419927089.jpg"可以看到一张图像. 2.新建FinalBitmap目标 1 FinalBitmap bitm

win8和win7下解决php5.3和5.4、5.5等不能加载php_curl.dll的终极解决办法 收藏

win8和win7下解决php5.3和5.4.5.5等不能加载php_curl.dll的终极解决办法 收藏2015年01月11日 最近分别在WIN7和Windows8 上分别安装php 高版本!都遇到了这个问题! 一.win7系统32位, apache2.2, php5.2升级到5.4. 这个比较容易: 1. phpinfo发现没有加载curl; 2. 在php.ini中设置extension_dir 指向e:\php5.4\ext; 部分php扩展加载了, 但curl仍不行. 3. 设置win

记一次解决cmd中执行java提示"找不到或无法加载主类"的问题

今天遇到一个问题:在cmd命令行中,用javac编译java文件可以成功,但是用java执行却提示"找不到或无法加载主类".现将该问题的原因以及解决办法记录一下. 先理解一下系统变量path和classpath的作用. path:可执行命令的搜索路径,在该路径下搜索可以运行的程序或批处理文件. 命令行中输入一个命令,则会在path配置的目录中查找该命令,如果存在则调用该程序运行,如果不存在则提示" 'XXX' 不是内部或外部命令,也不是可运行的程序或批处理文件."

使用jquery.more.js来实现点击底部更多后, 底部加载出新的数据

<div class="bus-nav-bar ft12"> <div class="navt bor-r-c pos-rel {if $int == 0}fwbold{/if}"><a href="portal.php?mod=merchant&action=voucherlist&int=0">全部订单</a><em class="pos-abs">

微信小程序页面事件-下拉刷新,上拉加载更多

1.下拉刷新的概念及应用场景. 概念: 下拉刷新是移动端更新列表数据的交互行为,用户通过手指在屏幕上子上而下的滑动,可以触发页面的下拉刷新,更新列表数据. 应用场景: 在移动端,数据列表是常见的页面效果,更新列表数据是最基本的页面需求,相比于按钮刷新,定时刷新来说,下拉刷新的用户体验方便友好,已经成为移动端刷新列表数据的最佳解决方案. 微信小程序启动下拉刷新: 两种方式: 1.需要在app.json 的window选项中或页面配置中开启enablePullDownRefresh, 但是,一般情况

js效果笔记:怎样实现图片的懒加载以及jquery.lazyload.js的使用

在项目中有时候会用到图片的延迟加载,那么延迟加载的好处是啥呢? 我觉得主要包括两点吧,第一是在包含很多大图片长页面中延迟加载图片可以加快页面加载速度:第二是帮助降低服务器负担. 下面介绍一下常用的延迟加载插件jquery.lazyload.js以及怎样实现一个延迟加载的插件. 一:jquery.lazyload.js插件 lazyload是jQuery写的延迟加载插件,在浏览器可视区域外的图片不会被载入, 直到用户将页面滚动到它们所在的位置. 这与图片预加载的处理方式正好是相反的. 实现原理 首

基于 Koa平台Node.js开发的KoaHub.js的控制器,模型,帮助方法自动加载

koahub-loader koahub-loader是基于 Koa平台Node.js开发的KoaHub.js的koahub-loader控制器,模型,帮助方法自动加载 koahub loader Installation $ npm install koahub-loader Use with koa // 1.model loader var model = loader([ {      root: './app/model',      suffix: '.model.js' }, { 

JS点击任意标签获得该标签属性,以获得ID为例,以及AJAX的异步原理和 $(document).ready()与window.onload加载方法的区别

js代码: //$(document).click(function (e) { // 在页面任意位置点击而触发此事件 // var select = ""; // var i = $(e.target).attr("id"); // e.target表示被点击的目标 //这里是实际项目里面寻找下拉框的方法 // select = e.target.parentNode.parentNode.getElementsByTagName('select') //循环的方

妹子UI-yepnope.js使用详解及示例分享(异步加载数据)

yepnope.js 是一个超高速的按条件异步加载资源的加载器,允许你只加载使用到的资源(css及js). yepnope.js的一个典型实例: ? 1 2 3 4 5 yepnope({ test : Modernizr.geolocation, yep : 'normal.js', nope : ['polyfill.js', 'wrapper.js'] }); 此实例表示如果Modernizr.geolocation为真的时候加载normal.js,为假则加载polyfill.js及wra