请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

缓存读取问题

posts-detail.js页面,onCollect函数,在用户点击“收藏按钮”后,需要在缓存中读取现有的缓存posts_collected。

  1. 按照老师的视频一步步操作是没有问题的,因为之前已经在缓存中写入了数据;
  2. 但是如果消除掉所有的缓存,直接点击,就会出现错误: TypeError: Cannot create property ‘0’ on string ‘’
  3. 我逐行分析了脚本,个人觉得是在读取空缓存时,是一个空字符串,导致的TypeError;
  4. 于是我想着把类型改为Object,但试了几种方法都没成功:
    • JSON.parse(str) 提示:Unexpected end of JSON input,于是又想办法格式化字符串,因为本身就是个空字符串,我也很奇怪:
    • var obj = eval(’(’+str+’)’); 被禁了,不能使用
    • .replace(/\ufeff/g, “”) 的方式也不行

不知道是不是我的思路错了,加之卡太久了,希望老师能提点一下,不知道是不是有一步我错过了。
目前的我程序逻辑里,posts_collected是需要先读取,再写入新值,并没有初始化的步骤(也不能初始化,缓存会清空)。

正在回答

1回答

不用改变类型,加一个判断,判断如果是空,就可以了。

0 回复 有任何疑惑可以回复我~
  • 提问者 慎走刀口 #1
    诶。。。不太理解,已经找出有问题的语句,this.data.collected的type是string,值是空的
    
        onCollect(event){
            console.log("提示:收藏按钮被点击")
            this.data.collected = !this.data.collected
        
            let postsCollected = this.data._postsCollected
            postsCollected[this.data._pid] = this.data.collected //这句出错
            wx.setStorageSync('posts_collected', postsCollected)
    
            this.setData({
                collected:this.data.collected
            })
        },
    回复 有任何疑惑可以回复我~ 2022-03-10 15:31:16
  • 提问者 慎走刀口 #2
    害~ 我这脑子塞住了,如果缓存是空的,我直接赋一个空Object不就好了。出去晃了一圈就想起来了。
    回复 有任何疑惑可以回复我~ 2022-03-10 17:12:15
  • 提问者 慎走刀口 #3
    非常感谢!
    回复 有任何疑惑可以回复我~ 2022-03-10 19:20:13
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信