今天在调试小程序的过程中,进了一个坑,程序加载需要先获取用户信息,然后保存到Storage中,然后首页去

Storage取信息,根据用户信息去查本地服务器数据列表,可是发现第一次进入的时候,数据总是加载不出来,只有再次进入才有数据。调试之后发现app.js onLaunch并没有先于onLoad 执行完再执行,而是onLoad先执行完,所以第一次进入的时候根本没有Storage,追了下原因是因为wx.login是需要用户授权登录,同时异步加载首页,所以就出现这问题,解决办法

1、加一个启动页,获取成功后,然后再跳转首页;

2、使用promise,判断进程状态,在index中去判断进程状态,再去执行页面的加载。

解释下Promise:

var promise = new Promise(function(resolve, reject) {if (/* 异步操作成功 */){resolve(value);} else {reject(error);}
});promise.then(function(value) {// success
}, function(value) {// failure
});

Promise 构造函数接受一个函数作为参数,该函数的两个参数分别是 resolve 方法和 reject 方法。

如果异步操作成功,则用 resolve 方法将 Promise 对象的状态,从「未完成」变为「成功」(即从 pending 变为 resolved);

如果异步操作失败,则用 reject 方法将 Promise 对象的状态,从「未完成」变为「失败」(即从 pending 变为 rejected)。

贴一下APP.js代码:

//app.js
var http = require('service/http.js')
App({onLaunch: function() {//调用API从本地缓存中获取数据// var that = this;},getAuthKey: function () {var that = this;return new Promise(function (resolve, reject) {// 调用登录接口wx.login({success: function (res) {if (res.code) {that.globalData.code = res.code;//调用登录接口wx.getUserInfo({withCredentials: true,success: function (res) {that.globalData.UserRes = res;that.globalData.userInfo = res.userInfo;that.func.postReq('/api/v1/image/oauth', {code: that.globalData.code,signature: that.globalData.UserRes.signature,encryptedData: that.globalData.UserRes.encryptedData,rawData: that.globalData.UserRes.rawData,iv: that.globalData.UserRes.iv}, function (res) {wx.setStorage({key: "auth_key",data: res.data.auth_key})var res = {status: 200,data: res.data.auth_key}resolve(res);})}})} else {console.log('获取用户登录态失败!' + res.errMsg);var res = {status: 300,data: '错误'}reject('error');}  }})});},
})
//index.jsonLoad: function () {app.getAuthKey().then(function (res) {console.log(res);if (res.status == 200){var auth_key = res.data;app.func.req('/api/v1/image/theme-list', {page: 1,auth_key: auth_key}, function (res) {var page = that.data.pageValue + 1;that.setData({images: res.data,pageValue: page});});}else{console.log(res.data);}});

解决微信小程序 app onLaunch异步请求,在没有请求执行完就加载首页了的问题相关推荐

  1. android post请求时报415错误,解决微信小程序用 SpringMVC 处理http post时请求报415错误...

    解决微信小程序用 SpringMVC 处理http post时请求返回415错误 写微信小程序时遇到的问题,这个坑硬是让我整了半天 wx.request请求跟ajax相似处理方法一致javascrip ...

  2. 自己的微信小程序学习笔记【3】——第三方UI库Lin-Ui的加载及使用

    其他微信小程序的学习笔记 自己的微信小程序学习笔记[1]--小程序开发工具的使用及项目文件说明 自己的微信小程序学习笔记[2]--从零开始新建项目 文章目录 其他微信小程序的学习笔记 前言 一.Lin ...

  3. 解决微信小程序“app.json: [“workers“] 字段需为 目录“错误及worker的使用

    我们如果遇到[ miniprogram/app.json 文件内容错误] miniprogram/app.json: ["workers"] 字段需为 目录(env: Window ...

  4. 微信小程序 诡异的异步调用问题,函数执行结果与预想不一致

    有一个需求,初次登录小程序会获取用户的头像和昵. 现在有两个请求,前一个获取用户的头像和昵称,然后把结果存在变量里,然后另一个函数获取这些变量然后发起请求,将头像和昵称存在服务器. 一开始成功了,觉得 ...

  5. 微信小程序滚动Tab选项卡:左右滑动切换、触底加载分页

    文章目录 效果图 一.顶部标签栏 二.列表内容部分 swiper组件高度及上下滚动样式 三.数据结构及赋值方法 四.scroll组件触底事件(分页相关 五.scroll组件的高度样式 swiper组件 ...

  6. onlaunch 异步_微信小程序之onLaunch与onload异步问题

    所述问题: 前端时间开发了一个微信小程序商城项目,因为这个项目我们的需求是进入小程序就通过wx.login({}) 这个api进行用户登录,获取系统后台的用户基本信息.再此之前,一直以为微信小程序中的 ...

  7. 微信小程序APP(商超营销类)经验总结

    项目介绍 这是一款主打门店营销的小程序.包括首页.门店.营销.个人设置.登录.数据统计展示.营销设置等. 本来要独立完成整个项目,包括前后端一套的,有些意外因素,项目临时收尾(说明:只完成了前端的部分 ...

  8. 微信小程序app.js中的全局变量globalData改变,如何通知其它页面界面显示改变,小程序中如何在其他页面中监听到globalData中值的变化

    微信小程序app.js中的全局变量globalData改变,如何通知其它页面界面显示改变,小程序中如何在其他页面中监听到globalData中值的变化 在小程序中,我们一般在app.js的onLaun ...

  9. 微信小程序 app.json 详细介绍

    微信小程序 app.json 详细介绍 {// 写各个页面的路径 (新增页面或者减少页面都要对其进行修改)"pages": ["pages/index/index&quo ...

最新文章

  1. converter 冷迁
  2. Centos7下关闭带验证的MongoDB
  3. SAP Commerce Cloud ( 电商云 ) 路由路径的自定义配置与开发
  4. element 怎么把数据写到日历表上_数据集 | 地理空间数据云30m的DEM爬取
  5. Domino Web开发规则之一:Notes命名规范
  6. Miller_Rabin测试法
  7. VC++ 6.0 快捷键
  8. springboot分层构建Docker镜像实践,统统都会!
  9. Linux Mint 19 Tara x86_64安装Docker-ce
  10. 这里除了安全,什么都不会发生!Docker镜像P2P加速之路
  11. 深度复数网络 Deep Complex Networks
  12. 给所有大龄测试员写的一份信
  13. 九九乘法表(99)详解
  14. 三星手机拍照后 图片翻转
  15. xps15 9500加装1T硬盘
  16. Android代码混淆工具Proguard学习
  17. 云程发轫,万里可期 | 云扩科技再次入选Gartner《2022年中国ICT技术成熟度曲线报告》
  18. Nexus配置使用代理仓库
  19. python绘制图形微格课_什么是微格教学-海天清泓                          -51CTO博客...
  20. Android TV笔记1

热门文章

  1. 最新传智播客黑马训练营JAVAEE49期培训全套
  2. 强化学习中的马尔可夫决策过程
  3. select SCM type and URL 用m2e插件从svn导出maven项目
  4. 快速排序,归并排序的递归实现(c++)
  5. 光明勇士服务器一直维护中,光明勇士一人双职业利弊分析 到底好还是不好
  6. Unity实现简单贪吃蛇
  7. Quartz 实现画图片、写文字、画线、椭圆、矩形、棱形等。
  8. 【正点原子FPGA连载】 第七章 Verilog HDL语法 摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0
  9. 【元胞自动机】元胞自动机交通事故通行【含Matlab源码 1345期】
  10. js遍历对象(js遍历对象的所有属性)