promise封装微信小程序请求方式
(以下代码直接拿来就可以用)
const HTTPS_HOST = "http://192.168.0.29:8080" // w
// const HTTPS_HOST = "http://192.168.0.10:8080" // l
function dealResult(res, resolve, reject) {
let code = res.code || res.data.code;
if (res.errMsg == 'openDocument:ok') {
resolve(res);
} else if (code === 200) {
resolve(res.data);
} else if (code === 401) {
wx.showToast({
title: '登入已过期',
icon: 'error',
duration: 2000
});
wx.reLaunch({
url: '/pages/login/login'
})
} else if (code === 500) {
wx.showToast({
title: res.data.msg || "",
icon: 'none',
duration: 2000
})
resolve(res.data);
}
}
function request(options, type) {
let params = options.data || {};
return new Promise((resolve, reject) => {
var token;
wx.getStorage({
key: 'token',
success(res) {
token = res.data;
getHttp(token, params, options, type, resolve, reject)
},
fail(res) {
if (options.url != "/auth/login" && options.url != "/code") {
return;
} else {
getHttp(token, params, options, type, resolve, reject)
}
}
})
})
}
function getHttp(token, params, options, type, resolve, reject) {
// 通用接口拦截
if (typeof type == 'undefined') {
wx.request({
header: {
'content-type': 'application/json',
'appSign': 'wxapp',
"Authorization": "Bearer " + token
},
...options,
data: params,
url: HTTPS_HOST + options.url,
success(res) {
dealResult(res, resolve, reject);
},
fail(err) {
wx.hideLoading()
// 错误处理
wx.showModal({
title: '提示',
showCancel: false,
content: '请求超时,请检查网络!',
success: function () {
}
})
reject(err);
}
});
} else if (typeof type != 'undefined' && type == 'downloadFile') {
// 下载预览
wx.downloadFile({
...options,
url: HTTPS_HOST + options.url,
header: {
'appSign': 'wxapp',
"Authorization": "Bearer " + token
},
success(res) {
const filePath = res.tempFilePath;
wx.openDocument({
filePath: filePath,
fileType: 'pdf',
success: function (res) {
console.log('打开文档成功');
dealResult(res, resolve, reject);
},
fail(err) {
console.log('打开文档失败:', err)
}
})
},
fail(err) {
reject(err);
}
})
} else if (typeof type != 'undefined' && type == 'uploadFile') {
wx.uploadFile({
...options,
url: HTTPS_HOST + options.url,
header: {
'appSign': 'wxapp',
"Authorization": "Bearer " + token
},
success(res) {
// const data = res.data;
res = JSON.parse(res.data)
dealResult(res, resolve, reject);
},
fail(err) {
console.log('err:', err)
reject(err);
},
complete(err) {
// console.log('comp:', err)
reject(err);
}
})
}
}
export default request;