当前位置:首页 > 科技  > 软件

我LocalStorage犯了两个小错误,差点导致项目大崩溃!

来源: 责编: 时间:2024-04-22 17:15:38 233观看
导读前言大家好,我是林三心,用最通俗易懂的话讲最难的知识点是我的座右铭,基础是进阶的前提是我的初心。背景这次分享我在项目中关于localStorage犯的两个小错误,由于我所做的功能点,被应用到了项目的核心模块中,所以这两个小错

前言

大家好,我是林三心,用最通俗易懂的话讲最难的知识点是我的座右铭,基础是进阶的前提是我的初心。YJJ28资讯网——每日最新资讯28at.com

背景

这次分享我在项目中关于localStorage犯的两个小错误,由于我所做的功能点,被应用到了项目的核心模块中,所以这两个小错误,差点导致了整个项目上线后崩掉,现在想想都可怕~YJJ28资讯网——每日最新资讯28at.com

真的,有些错误虽小,但是一定要杜绝啊~YJJ28资讯网——每日最新资讯28at.com

一错:LocalStorage变量废弃

第一版

事情是这样的,我有一个需求,需要将一个url存进LocalStorage中YJJ28资讯网——每日最新资讯28at.com

const BASE_URL = 'baseUrl'// 存时const setUrlStorage = (url: string) => {  Storage.set(BASE_URL, url)}// 取时const getUrlStorage = () => {  return Storage.get(BASE_URL)}// 使用时const baseUrl = getUrlStorage() ??                 'http://api.com'

并且这个代码上线了,用户也使用了这段代码的功能。。YJJ28资讯网——每日最新资讯28at.com

第二版

后来,觉得直接存不太好,得加个时间戳,让这个url具有时效性,这时候我将代码改成了YJJ28资讯网——每日最新资讯28at.com

const BASE_URL = 'baseUrl'// 失效时间const TIME_OUT = 60 * 60 * 1000// 存时const setUrlStorage = (url: string) => {  Storage.set(BASE_URL, JSON.stringfy({    url,    // 添加时间    time: Date.now()  }))}// 取时const getUrlStorage = () => {  const baseUrlObj =             Storage.get(BASE_URL)  const { url, time } =             JSON.parse(baseUrlObj)  // 判断是否失效  if (Date.now() - time >= TIME_OUT) {    return null  } else {    return url  }}// 使用时const baseUrl = getUrlStorage() ??                 'http://api.com'

问题来了

由于之前上线了第一版了,所以有的用户已经将url存在了LocalStorage中了,这时候存储中是YJJ28资讯网——每日最新资讯28at.com

baseUrl -> 'http://linsanxin.api.com'

但是后来我改成了第二版并且上线了,这个时候用户使用第二版的代码去取第一版中的存储,会导致报错YJJ28资讯网——每日最新资讯28at.com

// 取时const getUrlStorage = () => {  const baseUrlObj =             Storage.get(BASE_URL)  // 这里直接报错,取得是第一版的字符串  // JSON.stringfy + 字符串 直接报错  const { url, time } =             JSON.stringfy(baseUrlObj)  // ...coding}// 使用时const baseUrl = getUrlStorage() ??                 'http://api.com'

改正:变量废弃

那么应该怎么改正呢?大家要注意一个点:YJJ28资讯网——每日最新资讯28at.com

当LocalStorage中某个缓存,它的数据格式改变了,那么一定要废弃他的key,换一个新的YJJ28资讯网——每日最新资讯28at.com

所以正确改正方法是,将baseUrl这个变量废弃了,换个新的YJJ28资讯网——每日最新资讯28at.com

// 废弃 const BASE_URL = 'baseUrl'const BASE_URL = 'baseUrlV2'

二错:JSON.parse无错误处理

由上一个错误,可以发现,在JSON.parse时进行错误处理,是非常重要的YJJ28资讯网——每日最新资讯28at.com

注意:JSON.parse不止用在取LocalStorage时,还有其他很多使用场景YJJ28资讯网——每日最新资讯28at.com

所以,每次JSON.parse时要做好错误的兜底处理,防止由于错误导致后面代码执行不下去YJJ28资讯网——每日最新资讯28at.com

// 取时const getUrlStorage = () => {  try {    const baseUrlObj =             Storage.get(BASE_URL)    const { url, time } =             JSON.stringfy(baseUrlObj)    return url  } catch(e) {    return null  }}

本文链接:http://www.28at.com/showinfo-26-84585-0.html我LocalStorage犯了两个小错误,差点导致项目大崩溃!

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 四款值得推荐的AI辅助编程工具

下一篇: JSON, Protobuf, Thrift和MessagePack的优缺点对比

标签:
  • 热门焦点
  • K60 Pro官方停产 第三方瞬间涨价

    虽然没有官方宣布,但Redmi的一些高管也已经透露了,Redmi K60 Pro已经停产且不会补货,这一切都是为了即将到来的K60 Ultra铺路,属于厂家的正常操作。但有意思的是该机在停产之后
  • 天猫精灵Sound Pro体验:智能音箱没有音质?来听听我的

    这几年除了手机作为智能生活终端最主要的核心之外,第二个可以成为中心点的产品是什么?——是智能音箱。 手机在执行命令的时候有两种操作方式,手和智能语音助手,而智能音箱只
  • K6:面向开发人员的现代负载测试工具

    K6 是一个开源负载测试工具,可以轻松编写、运行和分析性能测试。它建立在 Go 和 JavaScript 之上,它被设计为功能强大、可扩展且易于使用。k6 可用于测试各种应用程序,包括 Web
  • 摸鱼心法第一章——和配置文件说拜拜

    为了能摸鱼我们团队做了容器化,但是带来的问题是服务配置文件很麻烦,然后大家在群里进行了“亲切友好”的沟通图片图片图片图片对比就对比,简单对比下独立配置中心和k8s作为配
  • 多线程开发带来的问题与解决方法

    使用多线程主要会带来以下几个问题:(一)线程安全问题  线程安全问题指的是在某一线程从开始访问到结束访问某一数据期间,该数据被其他的线程所修改,那么对于当前线程而言,该线程
  • 一文掌握 Golang 模糊测试(Fuzz Testing)

    模糊测试(Fuzz Testing)模糊测试(Fuzz Testing)是通过向目标系统提供非预期的输入并监视异常结果来发现软件漏洞的方法。可以用来发现应用程序、操作系统和网络协议等中的漏洞或
  • 网红炒股不为了赚钱,那就是耍流氓!

    来源:首席商业评论6月26日高调宣布入市,网络名嘴大v胡锡进居然进军了股市。在一次财经媒体峰会上,几个财经圈媒体大佬就“胡锡进炒股是否知道认真报道”展开讨论。有
  • 到手价3099元起!iQOO Neo8 Pro今日首销:安卓性能最强旗舰

    5月23日,iQOO如期举行了新品发布会,全新的iQOO Neo8系列也正式与大家见面,包含iQOO Neo8和iQOO Neo8 Pro两个版本,其中标准版搭载高通骁龙8+,而Pro版更
  • Meta盲目扩张致超万人被裁,重金押注元宇宙而前景未明

    图片来源:图虫创意日前,Meta创始人兼CEO 马克·扎克伯发布公开信,宣布Meta计划裁员超11000人,占其员工总数13%。他公开承认了自己的预判失误:“不仅
Top