本地缓存bug

发布于 6 年前作者 yutao16076 次浏览最后编辑 6 年前来自 ask

第一次进入小程序的时候,执行

wx.setStorageSync('key', 'value')

然后打开一个新页面,执行

Page({
    data: {
        userData: wx.getStorageSync('key'),
    },

获取出来的值为空的

8 回复
juntan
juntan1 楼6 年前

Page 这个方法在页面被跳转前就已经执行了,那个时候 getStorage 发生在 set 之前。

建议在 onLoad 中调用 getStorage

ayao
ayao2 楼6 年前

第一次进小程序会有问题,第二次以后就没问题了

na97
na973 楼6 年前

是在 getUserInfo 以后才跳转到新页面的吗?

xiuying18
xiuying184 楼6 年前

获取了登录信息后写入本地缓存,然后在页面手动点击跳转到新页面

yejie
yejie5 楼6 年前

我在page外面调用,获取也是空的

const userData = wx.getStorageSync(‘userData’);

yang86
yang866 楼6 年前
//index.js
//获取应用实例
const app = getApp()
 
Page({
  data: {
    motto: 'Hello World',
    userInfo: {},
    hasUserInfo: false,
    canIUse: wx.canIUse('button.open-type.getUserInfo')
  },
  //事件处理函数
  bindViewTap: function() {
    wx.navigateTo({
      url: '../logs/logs'
    })
  },
  onLoad: function () {
    if (app.globalData.userInfo) {
      this.setData({
        userInfo: app.globalData.userInfo,
        hasUserInfo: true
      })
    } else if (this.data.canIUse){
      // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
      // 所以此处加入 callback 以防止这种情况
      app.userInfoReadyCallback = res => {
        this.setData({
          userInfo: res.userInfo,
          hasUserInfo: true
        })
      }
    } else {
      // 在没有 open-type=getUserInfo 版本的兼容处理
      wx.getUserInfo({
        success: res => {
          app.globalData.userInfo = res.userInfo
          this.setData({
            userInfo: res.userInfo,
            hasUserInfo: true
          })
        }
      })
    }
  },
  getUserInfo: function(e) {
    console.log(e);
    app.globalData.userInfo = e.detail.userInfo;
    wx.setStorageSync('key', 'e.detail.userInfo');
    this.setData({
      userInfo: e.detail.userInfo,
      hasUserInfo: true
    })
  }
})
//logs.js
const util = require('../../utils/util.js')
 
Page({
    data: {
        logs: [],
        userInfo: wx.getStorageSync('key'),
    },

    onLoad: function () {

       //这里打印获取出来的是空的

        console.log(this.data.userInfo);
        this.setData({
            logs: (wx.getStorageSync('logs') || []).map(log => {
                return util.formatTime(new Date(log))
            })
        })
    }
})

其他文件都是官方例子

pingpeng
pingpeng7 楼6 年前

这是不是小程序的bug啊,给个回复

vwu
vwu8 楼4 年前

请提供一下调用

wx.setStorageSync('key', 'value')

前后的完整代码