有时候我们一找开小程序就要获取用户信息,我们一般会把获取用户信息的代码写在app的onLaunch方法中,然后把获取的token保存起来,共其它页面使用。
因为获取用户信息时我们是异步获取的。就导致app.js中 onLaunch 还没有执行完就去执行page页面的onload,导致用户数据无法加载。
之前我能过中间加入启动页解决了此问题,今天我们讲一下能过 Promise来解决。不过 Promise 理解起来有点难,我个人还是喜欢启动页解决
直接上相关代码吧
//app.js
App({
onLaunch: function() {
//这里不写东西了
},
userLogin: function() {
var that = this;
//定义promise方法
return new Promise(function(resolve, reject) {
// that.getUserLocation(that,null);
/*调用login获取code */
wx.login({
success(res) {
//通过code获取opeid
//我们用一个setTimeout代替wx.request的请求
setTimeout(function() {
//异步获取open_id了
wx.setStorageSync('open_id', "这是openid");
resolve(res);
}, 3000);
},
fail: function() {
reject();
}
});
});
},
globalData: {
userInfo: null
}
})
page页面代码
// pages/page1/page1.js
const app = getApp()
Page({
/**
* 生命周期函数--监听页面加载
*/
onLoad: function(options) {
app.userLogin().then(res => {
console.log('sucess');
console.log(wx.getStorageSync('open_id'))
});
},
})