自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

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

前言

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

背景

這次分享我在項目中關(guān)于localStorage犯的兩個小錯誤,由于我所做的功能點,被應(yīng)用到了項目的核心模塊中,所以這兩個小錯誤,差點導(dǎo)致了整個項目上線后崩掉,現(xiàn)在想想都可怕~

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

一錯:LocalStorage變量廢棄

第一版

事情是這樣的,我有一個需求,需要將一個url存進(jìn)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'

問題來了

由于之前上線了第一版了,所以有的用戶已經(jīng)將url存在了LocalStorage中了,這時候存儲中是

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

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

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

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

改正:變量廢棄

那么應(yīng)該怎么改正呢?大家要注意一個點:

當(dāng)LocalStorage中某個緩存,它的數(shù)據(jù)格式改變了,那么一定要廢棄他的key,換一個新的

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

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

二錯:JSON.parse無錯誤處理

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

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

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

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

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調(diào)試問題

2019-03-15 14:21:02

互聯(lián)網(wǎng)數(shù)據(jù)技術(shù)

2016-03-17 16:57:39

SaaSSaaS公司指標(biāo)

2012-09-20 09:24:36

編程學(xué)習(xí)編程開發(fā)

2013-06-19 09:49:28

編程學(xué)習(xí)

2020-07-01 07:38:38

SQL數(shù)據(jù)庫程序員

2020-09-16 12:51:40

Windows 10更新微軟

2012-09-10 09:43:21

編程編程學(xué)習(xí)編程錯誤

2011-05-04 09:05:52

網(wǎng)絡(luò)崩潰錯誤連接DHCP

2011-05-31 15:38:37

CSS

2010-05-28 09:57:50

TortoiseSVN

2022-09-20 10:22:00

CIOIT業(yè)務(wù)管理者

2025-03-24 08:00:00

數(shù)據(jù)庫開發(fā)代碼

2014-01-06 17:09:17

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

2020-08-07 11:46:47

JavaScript開發(fā)代碼
點贊
收藏

51CTO技術(shù)棧公眾號