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

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

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

前言

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

背景

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

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

一错:LocalStorage变量废弃

第一版

事情是这样的,我有一个需求,需要将一个url存进LocalStorage中7r128资讯网——每日最新资讯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'

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

第二版

后来,觉得直接存不太好,得加个时间戳,让这个url具有时效性,这时候我将代码改成了7r128资讯网——每日最新资讯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中了,这时候存储中是7r128资讯网——每日最新资讯28at.com

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

但是后来我改成了第二版并且上线了,这个时候用户使用第二版的代码去取第一版中的存储,会导致报错7r128资讯网——每日最新资讯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'

改正:变量废弃

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

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

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

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

二错:JSON.parse无错误处理

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

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

所以,每次JSON.parse时要做好错误的兜底处理,防止由于错误导致后面代码执行不下去7r128资讯网——每日最新资讯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的优缺点对比

标签:
  • 热门焦点
  • 2023 年的 Node.js 生态系统

    随着技术的不断演进和创新,Node.js 在 2023 年达到了一个新的高度。Node.js 拥有一个庞大的生态系统,可以帮助开发人员更快地实现复杂的应用。本文就来看看 Node.js 最新的生
  • 一文看懂为苹果Vision Pro开发应用程序

    译者 | 布加迪审校 | 重楼苹果的Vision Pro是一款混合现实(MR)头戴设备。Vision Pro结合了虚拟现实(VR)和增强现实(AR)的沉浸感。其高分辨率显示屏、先进的传感器和强大的处理能力
  • 从 Pulsar Client 的原理到它的监控面板

    背景前段时间业务团队偶尔会碰到一些 Pulsar 使用的问题,比如消息阻塞不消费了、生产者消息发送缓慢等各种问题。虽然我们有个监控页面可以根据 topic 维度查看他的发送状态,
  • 为什么你不应该使用Div作为可点击元素

    按钮是为任何网络应用程序提供交互性的最常见方式。但我们经常倾向于使用其他HTML元素,如 div span 等作为 clickable 元素。但通过这样做,我们错过了许多内置浏览器的功能。
  • 拼多多APP上线本地生活入口,群雄逐鹿万亿市场

    Tech星球(微信ID:tech618)文 | 陈桥辉 Tech星球独家获悉,拼多多在其APP内上线了“本地生活”入口,位置较深,位于首页的“充值中心”内,目前主要售卖美食相关的
  • 华为发布HarmonyOS 4:更好玩、更流畅、更安全

    在8月4日的华为开发者大会2023(HDC.Together)大会上,HarmonyOS 4正式发布。自2019年发布以来,HarmonyOS一直以用户为中心,经历四年多的发展HarmonyOS已
  • 苹果公司要求三星和LG Display生产「无边框」OLED iPhone显示屏

    据 The Elec 报道,苹果已要求其供应商为未来的 iPhone 型号开发「无边框」OLED 显示面板。苹果显然已要求三星和 LG Display 开发新的 OLED 显示面
  • 世界人工智能大会国际日开幕式活动在世博展览馆开启

    30日上午,世界人工智能大会国际日开幕式活动在世博展览馆开启,聚集国际城市代表、重量级院士专家、国际创新企业代表,共同打造人工智能交流平台。上海市副市
  • 北京:科技教育体验基地开始登记

      北京“科技馆之城”科技教育体验基地登记和认证工作日前启动。首批北京科技教育体验基地拟于2023年全国科普日期间挂牌,后续还将开展常态化登记。  北京科技教育体验基
Top