成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

我LocalStorage犯了兩個小錯誤,差點導致項目大崩潰!

開發(fā) 前端
我在項目中關于localStorage犯的兩個小錯誤,由于我所做的功能點,被應用到了項目的核心模塊中,所以這兩個小錯誤,差點導致了整個項目上線后崩掉,現在想想都可怕~

前言

大家好,我是林三心,用最通俗易懂的話講最難的知識點是我的座右銘,基礎是進階的前提是我的初心。

背景

這次分享我在項目中關于localStorage犯的兩個小錯誤,由于我所做的功能點,被應用到了項目的核心模塊中,所以這兩個小錯誤,差點導致了整個項目上線后崩掉,現在想想都可怕~

真的,有些錯誤雖小,但是一定要杜絕啊~

一錯:LocalStorage變量廢棄

第一版

事情是這樣的,我有一個需求,需要將一個url存進LocalStorage中

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'

并且這個代碼上線了,用戶也使用了這段代碼的功能。。

第二版

后來,覺得直接存不太好,得加個時間戳,讓這個url具有時效性,這時候我將代碼改成了

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中了,這時候存儲中是

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

但是后來我改成了第二版并且上線了,這個時候用戶使用第二版的代碼去取第一版中的存儲,會導致報錯

// 取時
const getUrlStorage = () => {
  const baseUrlObj = 
            Storage.get(BASE_URL)
  // 這里直接報錯,取得是第一版的字符串
  // JSON.stringfy + 字符串 直接報錯
  const { url, time } = 
            JSON.stringfy(baseUrlObj)
  // ...coding
}

// 使用時
const baseUrl = getUrlStorage() ?? 
                'http://api.com'

改正:變量廢棄

那么應該怎么改正呢?大家要注意一個點:

當LocalStorage中某個緩存,它的數據格式改變了,那么一定要廢棄他的key,換一個新的

所以正確改正方法是,將baseUrl這個變量廢棄了,換個新的

// 廢棄 const BASE_URL = 'baseUrl'
const BASE_URL = 'baseUrlV2'

二錯:JSON.parse無錯誤處理

由上一個錯誤,可以發(fā)現,在JSON.parse時進行錯誤處理,是非常重要的

注意:JSON.parse不止用在取LocalStorage時,還有其他很多使用場景

所以,每次JSON.parse時要做好錯誤的兜底處理,防止由于錯誤導致后面代碼執(zhí)行不下去

// 取時
const getUrlStorage = () => {
  try {
    const baseUrlObj = 
            Storage.get(BASE_URL)
    const { url, time } = 
            JSON.stringfy(baseUrlObj)
    return url
  } catch(e) {
    return null
  }
}
責任編輯:武曉燕 來源: 前端之神
相關推薦

2011-07-03 20:38:33

SEO

2015-03-04 14:16:39

Web開發(fā)小錯誤致命錯誤

2011-06-19 12:43:55

SEO

2017-09-27 16:38:51

2015-06-03 13:54:37

JavaScript小錯誤

2016-10-18 10:55:03

java調試問題

2019-03-15 14:21:02

互聯網數據技術

2013-06-19 09:49:28

編程學習

2012-09-20 09:24:36

編程學習編程開發(fā)

2020-07-01 07:38:38

SQL數據庫程序員

2016-03-17 16:57:39

SaaSSaaS公司指標

2020-09-16 12:51:40

Windows 10更新微軟

2012-09-10 09:43:21

編程編程學習編程錯誤

2011-05-31 15:38:37

CSS

2011-05-04 09:05:52

網絡崩潰錯誤連接DHCP

2010-05-28 09:57:50

TortoiseSVN

2014-01-06 17:09:17

App開發(fā)移動開發(fā)

2025-06-10 07:09:00

2020-08-07 11:46:47

JavaScript開發(fā)代碼

2025-03-24 08:00:00

數據庫開發(fā)代碼
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲欧美一区二区三区视频 | 亚洲成人一二区 | 日本精品一区二区三区在线观看 | 日韩欧美手机在线 | 国产美女h视频 | 久久亚洲一区二区三区四区 | 91精品国产91久久久久久 | 欧美精品久久久久 | 在线免费观看毛片 | 日本不卡一区 | 欧美亚洲另类在线 | 久久九九99 | 国产精品久久久久久久7电影 | 日韩精品专区在线影院重磅 | 成人综合一区二区 | 午夜免费在线电影 | 在线一区 | 97影院在线午夜 | 欧美日本一区二区 | 成人精品国产 | 91中文字幕在线观看 | 欧美日韩国产精品一区二区 | 日韩欧美三级在线 | 亚洲男女视频在线观看 | 欧美黑人狂野猛交老妇 | 天天草天天干天天 | 亚洲一区二区三区在线 | 中文字幕一区二区视频 | 男人的天堂一级片 | 日韩欧美亚洲一区 | 亚洲一区三区在线观看 | 久久国产一区 | 九九在线精品视频 | 中文字幕第十一页 | 亚洲欧美激情精品一区二区 | 精品一区二区三区在线播放 | 亚洲在线日韩 | 日韩中文字幕区 | 欧美日韩在线免费 | 日本午夜精品一区二区三区 | 亚洲97 |