小程序本地缓存数据失败

js配置
Page({
  data: {
    goodlist: [],
    // 赛事是否被收藏过
    isCollect: false,
  },
  onShow: function () {
    // 获取赛事详情数据
    let pages = getCurrentPages();
    let currentPage = pages[pages.length - 1];
    let options = currentPage.options;
    let goodid = options.id;
    // console.log(goodid)
    const db = wx.cloud.database();
    db.collection('addlist').where({
        _id: goodid, //查询addlist集合中字段_id为goodid的值
      })
      .get({
        success: res => {
          this.setData({
            goodlist: res.data[0],
            isCollect
          })
        },
        fail(err) {
          console.log("查询失败", err);
        }
      })
    // 1获取缓存中的赛事收藏数组
    let collect = wx.getStorageSync("collect") || [];
    // 2判断当前赛事是否被收藏
    let isCollect = collect.some(v => v.goodid === this.goodlist._id);
  },
  // 点击 收藏图标
  handleCollect() {
    let isCollect = false;
    // 获取缓存中的收藏数组
    let collect = wx.getStorageSync("collect") || [];
    // 判断是否被收藏过
    let index = collect.findIndex(v => v.goodid === this.goodlist._id);
    // 当index!=-1表示 已经收藏过
    if (index !== -1) {
      // 能找到 已经收藏过了 在数组中删除该赛事
      collect.splice(index, 1);
      isCollect = false;
    } else {
      // 没有收藏过
      collect.push(this.goodlist);
      isCollect = true;
    }
    // 把数组存入到缓存中
    wx.setStorageSync("collect", collect);
    // 修改data中的isCollect
    this.setData({
      isCollect
    })
  }
})

我想通过点击收藏将这一页的数据缓存入本地缓存中,但缓存中没有数组

不清除缓存的话,再次编译还会报错

参考GPT和自己的思路:

关于你提出的问题,首先需要了解小程序中关于本地缓存的相关知识。

在小程序中,我们可以使用wx.setStorageSync(key, data)来将数据存储到本地缓存中,而使用wx.getStorageSync(key)可以从本地缓存中获取数据。在你的代码中,使用了wx.getStorageSync("collect")来获取缓存中的赛事收藏数组,然后使用wx.setStorageSync("collect", collect)来将修改过后的数组存入缓存中。但是你在运行程序时发现缓存中没有该数组,这说明你程序存在问题,需要进行调试和修改。

根据你提供的代码,出现错误的原因是在获取缓存中的赛事收藏数组之后,没有将isCollect变量赋值为true或false,而是直接在setData中使用了未定义的变量。因此,应该在获取缓存后立即对isCollect进行赋值,代码应该修改为:

let collect = wx.getStorageSync("collect") || [];
let isCollect = collect.some(v => v.goodid === this.goodlist._id);
this.setData({
  goodlist: res.data[0],
  isCollect: isCollect
})

此外,页面的onShow函数中应该先获取赛事详情数据,然后再进行缓存相关操作,修改后代码应该为:

onShow: function () {
  // 获取赛事详情数据
  let pages = getCurrentPages();
  let currentPage = pages[pages.length - 1];
  let options = currentPage.options;
  let goodid = options.id;
  const db = wx.cloud.database();
  db.collection('addlist').where({
      _id: goodid, //查询addlist集合中字段_id为goodid的值
    })
    .get({
      success: res => {
        let collect = wx.getStorageSync("collect") || [];
        let isCollect = collect.some(v => v.goodid === this.goodlist._id);
        this.setData({
          goodlist: res.data[0],
          isCollect: isCollect
        });
      },
      fail(err) {
        console.log("查询失败", err);
      }
    })
}

至此,你应该可以成功将数据缓存到本地了。如果还有其他问题,可以进一步描述或提供相关代码,以便更好地解决问题。