老师您好,在6-6章节中,初始化功能有所不理解,请指教一下

来源:19-7 使用缓存实现文章收藏功能

黑猫会咬人

2017-12-14

当在没有缓存,首次进入页面时,我点入第一篇文章,有初始化第一条缓存,并赋值false,但是点入第二个文章的时候,第二条缓存并没有初始化,没有赋值,返回的是undefined,麻烦能解释一下嘛。

http://img.mukewang.com/szimg/5a32940a0001693205300327.jpg

http://img.mukewang.com/szimg/5a32940a00019cb309380340.jpg


写回答

3回答

老司机tony

2017-12-20

当你点击第二个文章的时候,postsCollected 里面只有{0:fase},  这时候postId = 2; 你代码中调postsCollected[postId] 也就是调postsCollected[2] ,因为里面没有2这个key,所以取不到,肯定是undefined。而且这个初始化是针对postsCollected为空的时候,当里面有{0:fase},其实走的是if语句。

0
1
黑猫会咬人
非常感谢!
2017-12-21
共1条回复

一起玩137

2018-02-01

老师这方法有个小小的bug

首先描述一下老师原本的逻辑:

第一步:获取缓存集

第二步:判断缓存集是否存在

如果postsCollected缓存集存在,那么就获取缓存集中对应的id号,前端状态变量collected就为真,显示图标已收藏

否则,就是缓存集不存在,那么就先创建一个空的缓存集,将当前文章缓存状态先设置为false,存入缓存集。collected默认为false

这里面的问题是:如果缓存集存在,但是对应的id号不存在呢?获取不到对应的id号,那么postCollected就会被认为是undefine,出现错误。

因此,我的修改是,postCollected应该在判断语句前定义好,然后在if条件语句(判断缓存集是否存在)中再嵌套一个if条件语句(判断是否存在对应的id号),如果有更好的办法请及时告知,非常感谢。

步骤更改如下:

第一步:获取缓存集

第二步:获取缓存文章id

第三步:判断缓存集是否存在

         如果缓存集存在     继续判断对应的id值是否存在(存在      设置collected调节前端收藏状态;  不存在    设置当前文章的缓存为false)

         缓存集不存在    创建一个空的缓存集对象    设置当前文章缓存为false    

备注:collected不设置就默认为false

//img.mukewang.com/szimg/5a732a7100018a7505390543.jpg

2
2
一起玩137
回复
慕前端6546965
方便截图吗?
2018-03-07
共2条回复

慕虎5376285

2018-02-03

视频里 老师应该没有对onload进行测试,直接去测试收藏按钮了,所以没有发现这个问题,我是加了一层判断有没有对应id的缓存记录,就行了

0
0

微信小程序入门与实战(全新版) 超20000人学习的好课

4年同步微信官方迭代,累计20000+人学习, 比微信官方更火爆!

23960 学习 · 6930 问题

查看课程