連接網絡總有可能客戶端因為網絡情況,無法連接到微信服務器或者開發者服務器。但是有的只有在小程序啟動時才能運行,比如
onLaunch,通過這個我們可以獲取用戶的基本信息,或者定位用來做下一步處理,如果這個無法獲取數據,會導致整個小程序的失敗。
所以我建議可以把錯誤分兩個級別,假如是開發者服務器連接不上,可以通過重載頁面來處理,但是如果是onLaunch中的數據也無法獲取就必須讓用戶退出小程序,重新打開再試了。
app.json 中配置用來設置超時時間,默認為6000毫秒,也就是6秒
"networkTimeout": {
"request": 6000,
"downloadFile": 10000
},
一、在onLaunch運行任務如果超時,我把錯誤級別定為0,並轉向錯誤頁面
wx.login({ success(res) { if (res.code) { //console.log(res.code); //發起網絡請求 wx.request({ url: 'https://**/index/zz/getuserinfo', data: { code: res.code }, success: res => { wx.setStorageSync('open_id', res.data.openid); wx.setStorageSync('session_id', res.data.session_id); wx.setStorageSync('session_key', res.data.session_key); that.globalData.isSessionkey=true; //console.log(res.data); if (that.sessionCallback) { that.sessionCallback(res); } },fail:f=> { wx.showModal({ title: '提示', showCancel: false, content: '可能網絡不太好,請重試!', success: function () { wx.navigateTo({ url: '/pages/reload?error=0' }); } }); } }) } else { console.log('登錄失敗!' + res.errMsg) } }, fail: function () { wx.showModal({ title: '提示', showCancel: false, content: '可能網絡不太好,請重試!', success: function () { wx.navigateTo({ url: '/pages/reload?error=0' }); } }); } });
二、如果是頁面請求超時,我把錯誤定為2,可以通過重試來修復
wx.request({
url: webUrl + model.url,
data: model.param,
method: model.method,
success: function (res) {
},
fail: function (res) {
wx.hideLoading();
wx.showModal({
title: '提示',
showCancel: false,
content: '可能網絡不太好,請重試!',
success: function () {
wx.navigateTo({
url: '/pages/reload?error=1'
});
}
});
}
})
三、處理頁面:要使用getCurrentPages()獲取上一頁對象,必須使用wx.navigateTo轉向此頁
/**
* 頁面的初始數據
*/
data: {
error:0 // 0:需要退出小程序 1:可以重新發起網絡請求重試
},
reLoad:function(error)
{
var pages = getCurrentPages();//獲取頁面棧
if (pages.length > 1) {
//上一個頁面實例對象
var prePage = pages[pages.length - 2];
let url=prePage.route;
var options = prePage.options //如果要獲取url中所帶的參數可以查看options
console.log('options', options);
//拼接url的參數
var urlWithArgs = url + '?'
for (var key in options) {
var value = options[key]
urlWithArgs += key + '=' + value + '&'
}
urlWithArgs = urlWithArgs.substring(0, urlWithArgs.length - 1)
wx.reLaunch({
url: '/' + urlWithArgs,
fail:function(e)
{
wx.switchTab({
url: '/' + prePage.route,
})
}
});
}
},
/**
* 生命周期函數--監聽頁面加載
*/
onLoad: function (options) {
this.setData({ error: options.error});
// this.reLoad(options.error);
},
頁面wxml
<view class="container"> <button bindtap="reLoad" class="error" wx:if="{{error==1}}" >重新加載 </button> <navigator hover-class="none" wx:if="{{error==0}}" class="error" target="miniProgram" open-type="exit"> 退出重試</navigator> </view>
