收藏
回答

本地缓存bug

问题模块
API和组件

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

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

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

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

获取出来的值为空的


最后一次编辑于  2017-10-13
回答关注问题邀请回答
收藏

8 个回答

  • A锐
    A锐
    2017-10-16

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

    const userData = wx.getStorageSync('userData');


    2017-10-16
    赞同
    回复
  • 白开水
    白开水
    2017-10-16

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

    建议在 onLoad 中调用 getStorage

    2017-10-16
    赞同
    回复
  • A锐
    A锐
    2017-10-16

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

    2017-10-16
    赞同
    回复
  • A锐
    A锐
    2017-10-13

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

    2017-10-13
    赞同
    回复
  • 白开水
    白开水
    2017-10-13

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

    2017-10-13
    赞同
    回复
  • A锐
    A锐
    2017-10-13

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

    2017-10-13
    赞同
    回复
  • A锐
    A锐
    2017-10-13
    //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))
                })
            })
        }
    })

    其他文件都是官方例子

    2017-10-13
    赞同
    回复
  • 白开水
    白开水
    2017-10-13

    请提供一下调用

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

    前后的完整代码

    2017-10-13
    赞同
    回复