微信小程式設定請求超時wx.request等
一、用到的方法:
個人理解,比較粗糙 看不懂可以百度一下具體用法
new Promise:new了一個函式或者方法,可以被Promise.race等方法呼叫
resolve:回傳本方法成功要回傳的資料 相當于success return
reject:回傳本方法失敗要回傳的資料 相當于fail return 具體用法下面有
Promise.race:Promise.race([a,b]); race是Promise的一個方法可以呼叫 意為競速,a和b是兩個new的Promise方法,這個陣列中可以存多個Promise方法,執行之后a和b會同時執行 哪個先執行完就運行哪個 另一個就停止運行
以上都為Promise相關
setTimeout:設定超時 如果設定5秒 執行開始 等待(延遲)5秒后再執行其中的方法
就相當于a封裝了一個request請求,b為5秒超時時間,如果a在5秒內未完成b就會執行 同時a會停止
二、具體實作
先來兩個簡單的 先試試 可以執行 看不懂可以看下面有具體解釋過的
stop:function(){
let a = new Promise((resolve,reject) => {
if (true == false) {
setTimeout(resolve,3000,'成功')
}else{
setTimeout(resolve,1000,'失敗')
}
});
let b = new Promise((resolve,reject)=>{
setTimeout(reject,2000,'頁面丟失了,請重新進入')
})
Promise.race([a,b]).then(
success=>{
console.log(success);//回傳第二個resolve '失敗'
},
err=>{
console.log(err);
}
)
}
let p1 = new Promise((resolve, reject) => {
setTimeout(resolve, 1000, 'one');
});
let p2 = new Promise((resolve, reject) => {
setTimeout(resolve, 2000, 'two');
});
Promise.race([p1, p2]).then((value) => {
console.log(value);//這里p1延時1s 所以肯定是one
});
具體的 順便加了個wx.request 很多行有解釋
stop:function(){
//從這里開始 是new了一個a方法
let a = new Promise((resolve,reject) => {
console.log("進方法了...... 從這里開始就是要正常執行的代碼 直接放進去就行")
console.log("第一個方法,下面示例wx.request")
wx.request({
url: url,
method: method,
data: data,
header: {...省略},
dataType: 'json',
success: function (res) {
//這里就相當于return了 因為Promise是new的一個方法 需要回傳
//具體用resolve還是reject 其實都一樣的 自己能判斷出來執行開始之后要怎么寫就可以了
resolve("操作成功");
},
fail: function (err) {
resolve("操作失敗");
}
})
});
//a方法結束
//b方法很簡單 設定一個setTimeOut
let b = new Promise((resolve,reject)=>{
//reject:回傳失敗 5000:延遲5秒執行 '頁面丟失了,請重新進入':回傳的資料
setTimeout(reject,5000,'頁面丟失了,請重新進入')
})
//b方法結束
//這里呼叫a,b倆方法 上面的new a和b只是創建了 此處和上面并沒有執行
//這里可以簡寫 a,b也可以有c(多個函式同時運行Promise.race([a,b,c]),不管有幾個,只執行最快的一個)
let aa = Promise.race([a,b]);
//這里開始執行 .then就是開始執行aa aa為Promise.race([a,b]) 把a和b放一起運行了
aa.then(
//這里回傳resolve就進入success 可以根據回傳值判斷執行完正常的代碼如何繼續下一步
success=>{
//這里可以加一個判斷
//if(success == '操作成功'){...}else if(success == '操作失敗'){...}
console.log(success);
},
//這里回傳reject就進入err 可以根據回傳值判斷執行完正常的代碼如何繼續下一步
err=>{
console.log(err);
//一個普通的wx.showModal 微信api有
wx.showModal({
title: '報錯了',
//這個err就是上面回傳的字串 '頁面丟失了,請重新進入'
content: err,
showCancel: false,
confirmText: '確定',
//這個是wx.showModal彈框 點了確定之后執行的操作 示例跳別的頁面
success:(res) => {
//一個普通的跳轉頁面操作
wx.reLaunch({
url: '/pages/aaa/aaa',
})
}
})
}
)
},
原創作者:h仔
參考:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise/race
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/295192.html
標籤:其他
下一篇:淺學JavaScript07
