小程序一般需要用token,去識別用戶身份,每次獲取到token之后,再進行下一步操作。再獲取到token之后,將token同步緩存,
app.js:
login: function () { var that = this; return new Promise(function (resolve, reject) { if (wx.getStorageSync('token')) { resolve(wx.getStorageSync('token')) } else { wx.login({ success: function (res) { if (res.code) { wx.request({ url: that.baseUrl + 'tt/wx/' + res.code, header: { 'content-type': 'application/json', 'cld.stats.page_entry': that.globalData.scene, 'version': that.globalData.version }, method: 'GET', success: function (e) { if (e.statusCode == 200) { that.globalData.token = e.data.token; wx.setStorageSync('token', e.data.token); resolve(e.data.token) } }, fail: () => { } }) } else { console.log('登錄失敗!' + res.errMsg) } } }); } }) },
在調用login方法的時候先判斷本地有沒有緩存的token,如果有直接返回,沒有的話再從后台通過接口獲取,獲取之后token之后同步緩存。
在首頁index.js,頁面onload的時候需要加載新聞列表,因為小程序所有請求都是異步加載,直接從緩存取token,有可能取不到,這樣可以再index.js里面這樣寫,具體的封裝請求方法,在我的另一篇博客里面有方法,這里不多做敘述。
app.login().then(() => { api.request(api.Url.newsList, 'POST', { type: 1, page:1 }).then(res => { console.log('success:', res) }).catch(res => { console.log("fail:", res) }).finallly(()=>{ console.log("finallly:", 結束) }) });
這樣的話就會避免取不到token的情況,之所以在login方法先判斷是否存在token緩存,一是避免不必要的請求,二是避免重復請求
參考:https://blog.csdn.net/qq_16646819/article/details/81235550