小程序
小游戏
企业微信
微信支付
扫描小程序码分享
https://developers.weixin.qq.com/miniprogram/dev/api/storage/wx.getStorageSync.html
这个页面的两种获取方法都测试过,还是偶尔出现获取不到的情况
4 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
同步异步的问题 app.js getUserId: async function(data){ // 优先使用缓存数据 var cacheUid = wx.getStorageSync('userId') || this.globalData.userId || 0 if(cacheUid) { this.globalData.userId = cacheUid wx.setStorageSync('userId', cacheUid) return {code:200, userId:cacheUid, message:''} } // 缓存数据不存在,再请求接口,并缓存数据 var res = await util.request(api.GetUserId, data, 'POST') var uid = res.code == 200 ? res.data : 0 res.code != 200 && console.log('getUserId:', res.message); this.globalData.userId = uid wx.setStorageSync('userId', uid) return {code:res.code, userId:uid, message:res.message} } pages/test/test.js var app = getApp() onShow: async function() { var data = 'xxxxx' let {userId,message} = await app.getUserId(data) if (userId) { this.setData({ userId: userId, }) }else{ wx.showToast({ title:message, icon:'none', mask:true }) } }
若认为该回答有用,给回答者一个[ 有用 ]吧!!
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
这个很正常,2个本来就是异步执行的~
这个有这种情况:
app.js里的请求还没返回时,show里面就去获取了。这个时候会失败
app.js里用await等待执行吧
app.js
util.request(api.GetUserId, data, 'POST').then(res => {
if (res.code == 200) {
this.globalData.userId = res.data
wx.setStorageSync('userId', res.data)
} else {
// util.showErrorToast(res.message);
}
})
pages/test/test.js
onShow: function() {
try {
let userId = wx.getStorageSync('userId')
if (userId) {
this.setData({
userId: userId,
} catch (e) {
// Do something when catch error
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
同步异步的问题 app.js getUserId: async function(data){ // 优先使用缓存数据 var cacheUid = wx.getStorageSync('userId') || this.globalData.userId || 0 if(cacheUid) { this.globalData.userId = cacheUid wx.setStorageSync('userId', cacheUid) return {code:200, userId:cacheUid, message:''} } // 缓存数据不存在,再请求接口,并缓存数据 var res = await util.request(api.GetUserId, data, 'POST') var uid = res.code == 200 ? res.data : 0 res.code != 200 && console.log('getUserId:', res.message); this.globalData.userId = uid wx.setStorageSync('userId', uid) return {code:res.code, userId:uid, message:res.message} } pages/test/test.js var app = getApp() onShow: async function() { var data = 'xxxxx' let {userId,message} = await app.getUserId(data) if (userId) { this.setData({ userId: userId, }) }else{ wx.showToast({ title:message, icon:'none', mask:true }) } }
若认为该回答有用,给回答者一个[ 有用 ]吧!!
这个很正常,2个本来就是异步执行的~
使用async/await~
或者用定时器轮询,什么时候有缓存了删除定时器~
这个有这种情况:
app.js里的请求还没返回时,show里面就去获取了。这个时候会失败
app.js里用await等待执行吧
app.js
util.request(api.GetUserId, data, 'POST').then(res => {
if (res.code == 200) {
this.globalData.userId = res.data
wx.setStorageSync('userId', res.data)
} else {
// util.showErrorToast(res.message);
}
})
pages/test/test.js
onShow: function() {
try {
let userId = wx.getStorageSync('userId')
if (userId) {
this.setData({
userId: userId,
})
}
} catch (e) {
// Do something when catch error
}