1. 概述
在微信小程序开发中,经常需要进行网络请求,小程序提供的wx.request API已经够用,但是每次请求都需要写一遍请求的地址、参数、方法等,有时候还需要对返回的数据进行处理,这样会显得有些冗余,且不利于维护。因此,对wx.request进行简单的封装,可以提高代码的健壮性和可维护性。
2. 实现
2.1 封装方法
比较常用的封装方法是通过Promise来封装
/**
* 网络请求
* @param url 请求地址
* @param params 请求参数
* @param method 请求方法,默认为GET
* @returns {Promise}
*/
function request(url, params = {}, method = 'GET') {
return new Promise((resolve, reject) => {
wx.request({
url: url,
data: params,
method: method,
header: {
'content-type': 'application/json'
},
success(res) {
resolve(res)
},
fail(err) {
reject(err)
}
})
})
}
这样,每次请求时,只需要调用request方法即可。
2.2 调用方法
使用封装的网络请求,只需要将请求地址、参数、请求方法作为参数传入request方法中即可。
request('http://www.example.com/api', {id:1})
.then(res => {
console.log(res.data)
})
.catch(err => {
console.log("请求失败:", err)
})
2.3 错误处理
由于封装的request方法只返回了成功和失败的结果,如果需要对返回的数据进行业务处理,可以通过Promise的resolve回调函数来进行数据的处理。
request('http://www.example.com/api', {id:1})
.then(res => {
if (res.data.code === 0) {
return res.data.data
} else {
throw new Error(res.data.msg)
}
})
.then(data => {
console.log(data)
})
.catch(err => {
console.log("请求失败:", err)
})
在上述代码中,如果网络请求成功返回了数据,首先判断接口返回数据中的code值是否为0,表示请求成功,然后将返回的数据赋值给data变量,进一步进行业务处理。
如果code不为0,则通过throw抛出一个异常,在.catch中进行处理。
2.4 添加Loading
在进行网络请求时,可能会出现较长时间的等待,此时可以添加Loading提示来提升用户体验,在请求成功或失败后隐藏Loading。
// index.js
let util = require('../../utils/util.js')
Page({
data: {
loading: false,
dataList: []
},
onLoad() {
this.getData()
},
getData() {
this.setData({loading: true})
util.request('http://www.example.com/api', {id:1})
.then(res => {
console.log(res.data)
this.setData({
dataList: res.data,
loading: false
})
})
.catch(err => {
console.log("请求失败:", err)
this.setData({loading: false})
})
}
})
// util.js
function request(url, params = {}, method = 'GET') {
wx.showLoading({
title: '加载中'
})
return new Promise((resolve, reject) => {
wx.request({
url: url,
data: params,
method: method,
header: {
'content-type': 'application/json'
},
success(res) {
resolve(res)
},
fail(err) {
reject(err)
},
complete() {
wx.hideLoading()
}
})
})
}
module.exports = {
request: request
}
在进行网络请求前,调用wx.showLoading方法显示Loading提示,在请求成功或失败后,调用wx.hideLoading方法隐藏Loading提示。
3. 总结
封装微信小程序的网络请求,可以减少代码冗余,提高代码的可维护性和健壮性。在封装时,一般采用Promise来进行网络请求的异步处理,可以通过Promise的resolve和reject函数来处理请求成功和失败的结果。另外,如果需要在网络请求时添加Loading提示,可以在封装的方法中调用wx.showLoading和wx.hideLoading方法。