之前由於項目比較趕 所有草草的封裝了一下請求 並沒有超時這類的操作;最近閑下來了,所以就補上了;
第一次自己寫,難免的,然后把,偶遇了一下promise.race();
PS::::
官解———————————————————————————————————————————————————————————————————————————————————————>
race
函數返回一個 Promise
,它將與第一個傳遞的 promise 相同的完成方式被完成。它可以是完成( resolves),也可以是失敗(rejects),這要取決於第一個完成的方式是兩個中的哪個。
如果傳的迭代是空的,則返回的 promise 將永遠等待。
如果迭代包含一個或多個非承諾值和/或已解決/拒絕的承諾,則 Promise.race
將解析為迭代中找到的第一個值。
——————————————————————————————————————————————————————————————————————————————————————————
::::
我的理解===>
_________
就是說這個promise.race([A,B]) 是異步操作, 同時進行的, 就行兩個人比賽吃飯;誰先吃完 拋出誰的成績;另一個停止;
__________
看到這么心情那個舒暢啊;
————————
然而,不知道我理解錯誤還是怎么回事,事實並不是如此,我同時執行兩個promise請求,依然是不會阻止進程慢的那個;同樣由於時間問題沒有深究,搞了一個計時器.....
額,異曲同工吧....反正效果達到了....有時間再去深入;
————————
/**
* 加載超時后顯示網絡錯誤提示
* 當前設置為 等待3秒,若超時后仍未返回請求結果,彈窗提示網絡錯誤
*/
var timer = undefined;
function reqPromise(reqUrl, reqData, reqType) {
return Promise.race([
new Promise(function (resolve, reject) {
timer = setTimeout(() => {
reject(showError("網絡連接超時"));
}, 3000)
}),post(reqUrl, reqData, reqType)
.then(res => {
timer && clearTimeout(timer);
return res;
}).catch(err => {
timer && clearTimeout(timer);
return Promise.reject(err);
})
])
}
/**
* 彈窗提示網絡錯誤
*/
function showError() {
wx.showModal({
title: '連接超時',
content: '請檢查網絡連接',
showCancel: false,
})
}