日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

小程序promise封装post请求_Promise封装微信小程序的Request请求

發布時間:2024/7/23 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 小程序promise封装post请求_Promise封装微信小程序的Request请求 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

回調地獄一向是影響開發和維護的癥結所在,無數個success()的嵌套再嵌套,導致代碼層級頗深,盤一次邏輯都要費勁千辛萬苦,ES6語法中的Promise,便是專為解決JS中異步請求回調的信任問題而存在的,結合小程序目前提供的API支持,可以用Promise將其進行簡單封裝,優化性能體驗。具體代碼如下(注意看注釋):

1. 首先在公共的util.js(或者自己創建的公有JS文件)中加入如下方法:

/**

* wxPromisify 使用promise封裝request請求

* @fn 傳入的函數,如wx.request、wx.download

*/

function wxPromisify(fn) {

return function(obj = {}) {

return new Promise((resolve, reject) => {

obj.success = function(res) { //網絡通暢,請求發送成功

console.log(res)

if (res.data.code == 200) { //判斷后臺返回的狀態碼,若是成功,返回resolve()

return resolve(res)

} else { //若是返回錯誤的狀態碼,彈窗提示失敗信息,并附帶錯誤代碼,以便快速定位問題所在

wx.showModal({

title: res.data.msg,

content: "錯誤碼:" + res.data.code,

showCancel: false,

})

}

}

obj.fail = function(res) { //網絡阻塞,請求發送失敗,顯示錯誤提示

showError() //此函數在下面定義,用于打印錯誤信息

return reject(res)

}

fn(obj) //執行函數,obj為傳入函數的參數

})

}

}

/**

* 加載超時后顯示網絡錯誤提示

* 當前設置為等待2.5秒,若超時后仍未返回請求結果,彈窗提示網絡錯誤

* @param 傳入一個Promise對象

*/

function racePromise(proRequest){

return Promise.race([

proRequest,

new Promise(function (resolve, reject) {

setTimeout(() => reject(), 2500)

})

])

}

/**

* 彈窗提示網絡錯誤

*/

function showError(){

wx.showModal({

title: '加載失敗',

content: '請檢查網絡連接',

showCancel: false,

})

}

最后將方法導出:

module.exports = {

URL: "https://...", //具體的請求地址頭

wxPromisify: wxPromisify,

racePromise: racePromise,

showError: showError,

}

2. 在wxml中進行調用,首先在Page上方引入util.js文件,并封裝部分方法:

const util = require('../../utils/util.js')

//調用util.js里寫好的方法,將小程序原生的request方法包裝成一個Promise對象

//這里也可以傳入其他原生請求,如wx.getSystemInfo、wx.getUserInfo、wx.login等,但需要將util.js里的‘判斷狀態碼’這一步刪掉

const proRequest = util.wxPromisify(wx.request)

然后在方法里進行調用,發送請求:

/**

* 通過code獲取用戶openid

*/

getOpenid(code) {

var that = this; //個人習慣,為避免this指向出錯,函數前必加

util.racePromise(proRequest({

url: util.URL + "...?code=" + code, //請求地址

method: 'POST', //函數方法

})).then(res => { //!!!注意括號的個數!!!

/* ... */ //若是請求成功,執行后續處理和操作 res是請求響應的結果

}).catch(res => { //若是請求超時,則catch進行捕獲,彈窗提示網絡錯誤

util.showError()

})

},

以上便是簡單的封裝方法,并處理了基本錯誤,后續可以根據需求添加Promise.all等方法,完善業務邏輯。

如有不妥之處,萬望指正!

總結

以上是生活随笔為你收集整理的小程序promise封装post请求_Promise封装微信小程序的Request请求的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。