微信小程序如何使用Promise對wx.request()封裝詳解(附完整代碼)
1. 原生wx.request()的缺點
- 回調(diào)地獄,可能會出現(xiàn)多層success套用的情況(用Promise封裝解決)
- 效率低,代碼冗雜,每次都要寫共同的參數(shù)(比如headers,公共的url)
- 可維護性差,后續(xù)查看和改代碼不方便,封裝后都在同一個文件,一目了然
wx.request({
url: 'example.php', //僅為示例,并非真實的接口地址
data: {
x: '',
y: ''
},
header: {
'content-type': 'application/json' // 默認值
},
success (res) {
console.log(res.data)
}
})
作為一個合格的前端開發(fā),為了代碼質(zhì)量和可維護性(不是因為懶),肯定要對這種代碼進行封裝,來讓我們的代碼變得更優(yōu)雅~~
2. 封裝思路
所有的封裝思路(無論是組件還是邏輯代碼),總結(jié)起來一句話就是抽取共性。
觀察我們的網(wǎng)絡請求代碼,可以發(fā)現(xiàn),有很多是一樣的,如公共請求路徑、對響應錯誤的處理方法、headers參數(shù)(如token)。
不同的如具體的接口地址、請求類型、請求參數(shù),我們封裝的時候把相同的抽取成一個文件,不同的地方再進行傳參即可。
3. 具體實現(xiàn)代碼
先建一個api文件夾(叫什么都可以,但是為了規(guī)范化),在下面新建文件request.js
// ----http----
// api URL
const apiUrl = "https://接口地址:端口";// 公共的請求地址
// 封裝微信請求方法
const request = (params) => {
let url = params.url;
let data = params.data;
let method = params.method;
let header = {
"Content-Type": "application/json"
};
// 鑒權(quán)驗證,獲取登錄之后后端返回的token,存在即在頭部Authorization寫token,具體的看后端需求
if (wx.getStorageSync("token")) {
// header.Authorization = wx.getStorageSync("token");
header.token = wx.getStorageSync("token");
}
return new Promise((resolve, reject) => {
wx.request({
url: apiUrl + url, // api url
method: method, // get/post
data: data, // 請求參數(shù)
header: header, // 頭部
success(res) {
// 請求成功
// 判斷狀態(tài)碼---errCode狀態(tài)根據(jù)后端定義來判斷
if (res.statusCode < 399) {
if (res.data.Code === 401) {
wx.showModal({
title: "提示",
content: "請登錄",
showCancel: false,
success(res) {
wx.navigateTo({
url: "/pages/login/login",
});
},
});
reject(res.data);
}
resolve(res.data);
} else {
// 其他異常
switch (res.statusCode) {
case 404:
wx.showToast({
title: '未知異常',
duration: 2000,
})
break;
default:
wx.showToast({
title: '請重試...',
duration: 2000,
})
break;
}
reject("未知錯誤,請稍后再試");
}
},
fail(err) {
if (err.errMsg.indexOf('request:fail') !== -1) {
wx.showToast({
title: '網(wǎng)絡異常',
icon: "error",
duration: 2000
})
} else {
wx.showToast({
title: '未知異常',
duration: 2000
})
}
reject(err);
},
complete() {
wx.hideLoading()
},
});
});
};
module.exports = {
apiUrl,
request,
}
然后再按業(yè)務需求,對具體的接口地址進行封裝,比如,我這里在api文件夾下再新建一個user.js文件,里面放登錄,注冊的一些方法,請求類型和請求參數(shù)根據(jù)接口文檔寫。
import {
request
} from "./request"
// 用戶相關(guān)
// 登錄
export const login = (params) => {
return request({
url: '/user/login',
data: params,
method: 'POST',
})
}
// 注冊
export const register = (params) => {
return request({
url: '/user/reg',
data: params,
method: 'POST',
})
}
正式在項目中使用:
import {
login
} from '../../../api/user'
// 點擊登錄的方法
handleLogin(){
login({
name: xxx,
password: xxx,
}).then((res) => {
if (res.code == 200) {
// 登錄成功之后的處理
} else {
// 登錄失敗的處理
}
}).catch((res) => {})
}
總結(jié)
到此這篇關(guān)于微信小程序如何使用Promise對wx.request()封裝的文章就介紹到這了,更多相關(guān)微信小程序用Promise對wx.request()封裝內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用JavaScript將PDF頁面中的標注扁平化的操作指南
扁平化(flatten)操作可以將標注作為矢量圖形包含在PDF頁面的內(nèi)容中,使其不可編輯,Dynamsoft Document Viewer是一個用于文檔掃描和查看的JavaScript SDK,可以添加標注、導出PDF,在本文中,我們將探討如何使用它,需要的朋友可以參考下2025-01-01
JavaScript+html5 canvas繪制繽紛多彩的三角形效果完整實例
這篇文章主要介紹了JavaScript+html5 canvas繪制繽紛多彩的三角形效果,以完整實例形式分析了html5的canvas繪制圖形的相關(guān)技巧,需要的朋友可以參考下2016-01-01
HTML+JavaScript實現(xiàn)筋斗云導航欄效果
這篇文章主要為大家介紹了如何利用HTML+JavaScript+CSS實現(xiàn)筋斗云導航欄效果,當鼠標經(jīng)過某個li,筋斗云跟著到當前的位置,感興趣的小伙伴可以試一試2022-03-03
unicloud云開發(fā)進階獲取首頁列表數(shù)據(jù)示例詳解
這篇文章主要為大家介紹了unicloud云開發(fā)進階獲取首頁列表數(shù)據(jù)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-03-03

