在项目中,一般会通过接口来确认用户,返回用户sessionId,后面全部接口都需提交sessionId,
在vue和小程序中,一般会在全局js(main.js / app.js)中异步获取,但是在未获取到时,index页面可能已经加载并进行了其他异步操作。
解决方法:
方法一:在index页前加一个启动页,获取成功后,然后再跳转首页;
方法二:使用promise,判断进程状态,在index中去判断进程状态,再去执行页面的加载。
例:小程序中:
app.js
//app.js
App({
onLaunch: function () {
var _this = this;
wx.showLoading({
mask: true
})
_this.getSessionId();
},
// 获取sessionId
getSessionId() {
var _this = this;
return new Promise(function (resolve, reject) {
wx.request({
url: _this.globalData.defaultHost + '/api/exam/sessionId',
header: {
'content-type': 'application/json' // 默认值
},
success(res) {
console.log(res.data);
if (res.data.q.d == "操作成功") {
_this.globalData.sessionId = res.data.q.s;
resolve(_this.globalData.sessionId);
} else {
wx.showToast({
title: res.data.q.d,
icon: 'none'
})
}
},
fail(error) {
console.log(error);
wx.showToast({
title: '小主您的网络错误,请重新进入~',
icon: 'none',
})
},
complete() {
wx.hideLoading();
}
})
})
},
globalData: {
userInfo: null,
defaultHost:'http://web.zhbx',
sessionId:''
}
})
index.js:
Page({
/**
* 页面的初始数据
*/
data: {
"packageList":[]
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
getApp().getSessionId().then(function(value) {
console.log(value);
// wx.request({
// url:
// })
})
},
})