wx-ajax
Version:
微信小程序 wx.request 二次封装支持Promise 和 callback 回调函数
120 lines (108 loc) • 4.04 kB
JavaScript
// 请求类封装
class Api {
constructor(baseURL) {
this.baseURL = baseURL;
}
/*
* ajax 请求封装 author mason 2019.05.27
* @path 路径
* @data requestBody
* @header null
* @method 请求方法 「默认为post」
* @dataType json
* @success 成功回调函数
* @fail 失败回调函数
* @showLoading 是否显示loading 默认为不显示
*/
ajax({ path, data, header, method, dataType, success, fail, showLoading }) {
return new Promise((resolve, reject) => {
// 显示loading
if (showLoading) {
wx.showLoading({
title: showLoading.msg || '加载中...',
mask:showLoading.mask || false
})
}
// wx.request 请求
wx.request({
url: this.baseURL + path,
data: data || {},
header: header || {
"content-type": "application/json",
accessToken: wx.getStorageSync("token") // 缓存里存的建议是token字段
},
method: method || "GET",
dataType: dataType || "json",
success: ( data ) => {
if (typeof success == 'function') {
success(data);
showLoading ? this.hideLoading(showLoading.endTime) : null;
} else {
resolve(data);
showLoading ? this.hideLoading(showLoading.endTime) : null;
}
},
fail: err => {
if (typeof fail == 'function') {
fail(err);
showLoading ? this.hideLoading(showLoading.endTime) : null;
} else {
reject(err);
showLoading ? this.hideLoading(showLoading.endTime) : null;
}
console.error(new Error(err));
}
});
});
}
// 公共 wx.request 请求
publicMethods({path, data, method = 'GET', header, dataType = 'json', success, error}) {
wx.request({
url: this.baseURL + path,
data: data || {},
header: header || {
"content-type": "application/json",
accessToken: wx.getStorageSync("token") // 缓存里存的建议是token字段
},
method,
dataType,
success: ( data ) => {
success(data);
},
fail: err => {
error(err);
console.error(new Error(err));
}
});
}
// get 方法
get(path, data, header){
return new Promise((resolve, reject) => {
this.publicMethods({path, data, header, success: data => resolve(data), error: err => reject(err)})
})
}
// post 方法
post(path, data, header){
return new Promise((resolve, reject) => {
this.publicMethods({path, data, method:"POST", header, success: data => resolve(data), error: err => reject(err)})
})
}
// put 方法
put(path, data, header){
return new Promise((resolve, reject) => {
this.publicMethods({path, data, method:"PUT", header, success: data => resolve(data), error: err => reject(err)})
})
}
// delete 方法
delete(path, data, header){
return new Promise((resolve, reject) => {
this.publicMethods({path, data, method:"DELETE", header, success: data => resolve(data), error: err => reject(err)})
})
}
hideLoading(endTime) {
setTimeout(() => {
wx.hideLoading();
}, endTime || 500);
}
};
module.exports = baseURL => new Api(baseURL);