微信小程序初學者外部數據庫開發和雲開發過程中常見bug及分析

在初學微信小程序開發過程中,難免因爲不能理解開發文檔中一些小細節造成一些難以查找的bug,記錄下來供大家交流學習。

(1)this指代這個頁面的所有object,但是最好在使用之前用var that = this 把this承接掉,這樣在後面的操作中有相同的函數或者變量的時候纔不會指代不明。下面這個例子中,最開始定義了一個默認的data,在調用wx.request()時又有一個參數data,如果在調用wx.request()之前就把this存給that,然後下面第二個紅框採用,content:that.data.content,就會出現第三個紅框的報錯信息:VM1956:1 thirdScriptError
Cannot read property 'data' of null;at api showToast complete callback function
TypeError: Cannot read property 'data' of null

因爲這裏的data可以指頁面默認的data,也可以指wx.request()的參數data,造成指代不明。

(2)調用wx.request()函數時,一般都是success,但是fail也會出現,就是沒有網絡的情況下,這個時候需要在fail回調函數裏面添加提示。

(3)調用wx.showLoading()需要注意的是,一般與wx.hideLoading()結合使用,一種是加一定的延時,在延時後取消,即:

setTimeout(function() {

wx.hideLoading()

}, 2000) //2000是延時,單位ms

一種是在回調函數中complete寫,這樣會在完成調用後消除轉圈的loading,邏輯才正確

complete(res) {

console.log('此處處理請求完成的邏輯')

wx.hideLoading()

}

(4)微信小程序中的變量彙總:1)普通頁面的變量data,可以直接寫在預留的data數據中,採用this.data.**,**表示data定義的變量;2)app.js中的的全局變量globalData,全局變量的訪問採用getApp().globalData.**,**就是全局變量;3)過程中的臨時變量,採用var定義,例如var x=1,或者var x=‘字符串’;4)傳參過程中,在*.wxml文件中用{{}}來傳遞普通頁面的變量data中的參數,採用src="{{variables}}",需要注意的是採用列表渲染的時候,需要刷新或者更新頁面,如果邏輯層的數據的修改要顯示到視圖層,需要調用this.setData({}),否者數據不會顯示到視圖層,造成頁面空白的結果,對比如下:

that.setData({

list: res.data.data//將返回值中的data賦值給列表渲染中的{{list}}變量

})

而如果使用下面這段賦值代碼:that.data.list = res.data.data,則結果爲:

(5)頁面刷新時渲染層和邏輯層的配合,各個頁面的切換函數與主頁面的監聽(* 生命週期函數--監聽頁面加載*/onLoad: function(options))、渲染等函數配合,包括wx.reLaunch(),wx.navigateTo(),wx.redirectTo(),reLaunch只在頁面初次加載的時候調用,這個時候用onLoad()來刷新頁面數據就很有效,而如果採用navigateTo,在點返回按鈕的時候,需要在onShow()中刷新,onLoad()不再調用,不能在這裏寫刷新數據的函數。

(6)使用新浪雲SAE進行後臺數據庫的管理時,在代碼管理中上傳代碼需要是zip的壓縮包,rar不能識別,另外一定要先實名認證,否者上傳代碼的時候會報以下錯:導入文件失敗,錯誤信息:svn import failed:svn_fs_is_file(): svn error(s) occured 22 (Invalid argument) Valid UTF-8 data (hex: 31 2f 2f 74 72 65 65 68 6f 6c 65 2f) followed by invalid UTF-8 sequence (hex: f0 2d a2 bf)

(7)使用動態渲染的時候,雙引號內部的引號需要用單引號,否者會出錯,因爲編譯器是根據第一個雙引號作爲開始來查到結束的雙引號,src="{{itemname.islike == 1 ? '/images/liked.png' : '/images/like.png'}}",另外動態渲染一定要用同一個數組進行渲染,不然會出錯

(8)小程序雲開發時,從小程序端獲取數據庫中的數據的時候,顯示獲取成功,但是數組一直爲空,也沒有任何錯誤,這是數據庫權限設置的問題,應該設置成:所有用戶可讀,僅創建者可讀寫,雲函數不需要設置成這樣也可以讀寫,這個是一個非常重要的區別且非常容易犯錯,再次強調,小程序雲開發時,小程序端和雲端獲取數據庫中的數據權限不一樣,小程序端需要的權限大,需要設置:所有用戶可讀,僅創建者可讀寫,纔可以讀取,否者爲空,雲端則默認設置就可以讀寫,即:僅創建者可以讀寫

(9) 在小程序端獲取數據庫中的數據時,由於數據庫數據獲取有延時,在有賦值判斷的操作過程中,需要將賦值語句放在數據庫使用後的complete裏面這樣判斷纔會有效,否者在數據還沒獲取就先進行判斷了,小程序並不會按你寫的順序流程進行,例如下面的例子中,去數據庫中查找userInfo的信息,如果找到就判定:that.data.isExitwork_id = 1,用做後續if語句的判別條件,但是如果不放在complete中執行if語句,if語句中就會出現that.data.isExitwork_id的值是0(初始賦值),而不是1,從而造成判斷錯誤或者沒辦法通過判斷。 

(10)小程序雲開發過程中需要批量導入數據到數據庫中,我們知道數據庫中導出的有2種格式,一種是.csv,一種是.json,如下圖:

個人喜歡採用.csv格式來存儲數據,因爲可以直接用excel打開並編輯,需要多餘輸入分隔符“,”或者“”,如下圖:

但是需要特別注意的是excel打開csv格式保存的時候,會提示:保存的文件格式可能包含有不兼容的功能。這時如果直接上傳到小程序雲開發的數據庫,則英文和數字不會出錯,但是中文會出現亂碼,這是編碼的問題,需要先用Notepad++軟件打開,在編碼欄設置編碼格式爲:轉爲UTF-8編碼,保存後上傳就可以解決中文亂碼問題。

(11)小程序雲開發獲取數據庫中的數據,並下載到本地Excel中,需要注意的文件的緩存有2-3min的存在時間,如果馬上切換下一個文件下載,會出現下載的文件是上一次選擇的文件,而不是本次最新的文件,這塊目前採用的策略是一個文件下載完,等幾分鐘再切換去下載另一個,雖然比較簡陋,但是還沒找到好的辦法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章