1. 程式人生 > >wx.getStorage非同步和wx.getStorageSync同步區別

wx.getStorage非同步和wx.getStorageSync同步區別

關於本地快取

1.wx.setStorage(wx.setStorageSync)、wx.getStorage(wx.getStorageSync)、wx.clearStorage(wx.clearStorageSync)

可以對本地快取進行設定、獲取和清理。本地快取最大為10MB

2.localStorage 是永久儲存

一、非同步快取

wx.setStorage(OBJECT)

將資料儲存在本地快取中指定的 key 中,會覆蓋掉原來該 key 對應的內容

?

1

2

3

4

5

6

7

8

9

wx.setStorage({

 

 key:"key",

 

 data:"value"

 

})

wx.getStorage(OBJECT)

從本地快取中非同步獲取指定 key 對應的內容。

?

1

2

3

4

5

6

7

8

9

10

11

wx.getStorage({

 

 key: 'key',

 

 success: function(res) {

 

   console.log(res.data)

 

 }

 

})

wx.getStorageInfo(OBJECT)

非同步獲取當前storage的相關資訊

?

1

2

3

4

5

6

7

8

9

10

11

12

13

wx.getStorageInfo({

 

 success: function(res) {

 

  console.log(res.keys)

 

  console.log(res.currentSize)

 

  

console.log(res.limitSize)

 

 }

 

})

wx.removeStorage(OBJECT)

從本地快取中非同步移除指定 key 。

?

1

2

3

4

5

6

7

8

9

10

11

wx.removeStorage({

 

 key: 'key',

 

 success: function(res) {

 

  console.log(res.data)

 

 }

 

})

 二、同步快取

wx.setStorageSync(KEY,DATA)

將 data 儲存在本地快取中指定的 key 中,會覆蓋掉原來該 key 對應的內容,這是一個同步介面。

wx.getStorageSync(KEY)

從本地快取中同步獲取指定 key 對應的內容。

wx.getStorageInfoSync

同步獲取當前storage的相關資訊

wx.removeStorageSync(KEY)

從本地快取中同步移除指定 key 。

三、清理快取

wx.clearStorage()

清理本地資料快取。

wx.clearStorageSync()

同步清理本地資料快取

關於同步快取和非同步快取的區別

以Sync(同步,同時)結尾的都是都是同步快取,二者的區別是,非同步不會阻塞當前任務,同步快取直到同步方法處理完才能繼續往下執行。

但是一般情況下不要用清除所有的快取,如果想要清除相應的快取,設定對應的快取內容為空陣列就好

 關於歷史搜尋

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

<input type="text" class="search-icon" placeholder="請輸入要搜尋的內容" bindinput="searchNameInput"/>

<text bindtap="setSearchStorage">搜尋</text>

 

 

<view>

  <view>

    <text style="float:left;" bindtap="deleteHistory">歷史搜尋</text>

    <text style="float:right;" bindtap="deleteHistory">刪除搜尋歷史</text>

  </view>

  <view>

    <view class="search-list" wx:for="{{searchData}}" wx:key="item">

      <view>{{item == null?'暫無資料':item}}</view>

    </view>

  </view>

</view>

 頁面

這裡有三個繫結事件

bindinput="searchNameInput" 獲取使用者輸入的資料

bindtap="setSearchStorage" 設定本地儲存

bindtap="deleteHistory" 刪除歷史搜尋

?

1

2

3

4

5

6

7

8

9

10

11

//獲取使用者輸入框的值

  searchNameInput:function(e){

    var that = this;

    that.setData({

      inputValue:e.detail.value

    })

  }

 

e.detail.value就代表了當前輸入值

 當點選搜尋的時候,bindtap="setSearchStorage"

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

//將使用者輸入的內容存入本地快取,並且將搜尋資料放到首頁

setSearchStorage:function(){

  var that = this

  if(this.data.inputValue != ''){

    //呼叫API向本地快取存入資料

    var searchData = wx.getStorageSync('searchData') || []

    searchData.push(this.data.inputValue)

    wx.setStorageSync('searchData', searchData)

 

    //讀取使用者搜尋商品

    var name = this.data.inputValue

    wx.request({

     url: 'www.shop.com/home/product/search',

     data: {name:name},

     method: 'GET',

     success: function(res){

        that.setData({

        goodsList: res.data.info,

      })

     },

    })

  }

}

 流程這麼走:

1.使用者輸入資料,點選搜尋

2.如果資料不為空,加入(設定)本地快取

3.去伺服器搜尋使用者想要的資料,賦值給這個頁面的變數

4.點選刪除,去除本地這個key的value

這裡的快取形式的  key=>value

var searchData = wx.getStorageSync('searchData') || []

獲取本地名字為'searchData'的快取,如果'searchData'這個快取不存在就相當於重新什麼一個空陣列,賦值給searchData這個變數

searchData.push(this.data.inputValue)

將使用者輸入的值PUSH進searchData這個變數裡

wx.setStorageSync('searchData', searchData)

呼叫API介面,重新設定key = 'searchData'的這個快取的value等於searchData

下面的wx.request是請求資料的內容,說膩了,印象夠深了。

這裡沒有繫結獲取快取的bindtap,只要獲取到,然後新增到Page裡面的data

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

//從本地獲取歷史搜尋資料

 

     var searchData = wx.getStorageSync('searchData')||[]

 

      this.setData({

 

        searchData:searchData

 

      })

 

  

 

deleteHistory

 

//刪除歷史搜尋資料

 

  deleteHistory:function(){

 

    var that = this

 

    wx.showModal({

 

    title: '提示',

 

    content: '是否刪除歷史搜尋',

 

    success: function(res) {

 

      if (res.confirm) {

 

        wx.setStorageSync('searchData', []);

 

        wx.switchTab({

 

          url: '/pages/index/index',

 

        })

 

       }

 

      }

 

    })

 

}

這裡是將'searchData'這個key的快取的value為空陣列,而不是使用API提供的wx.clearStorageSync,這個會清除其他的所有快取,而我只是想清除這一個key的快取