小程序自定義promise封裝request請求(連接超時)


之前由於項目比較趕  所有草草的封裝了一下請求  並沒有超時這類的操作;最近閑下來了,所以就補上了;
 
  第一次自己寫,難免的,然后把,偶遇了一下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,
})
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM