97 lines
3.5 KiB
JavaScript
97 lines
3.5 KiB
JavaScript
|
||
import { requestConfig } from './common.js';
|
||
|
||
export default class Request {
|
||
// 构造方法
|
||
constructor(config = {}, reqInterceptor = null, resInterceptor = null, successHandler, failHandler = null, completeHandler = null){
|
||
// 基础属性
|
||
this.baseUrl = config.baseUrl
|
||
this.header = config.header || {
|
||
"Content-Type":"application/x-www-form-urlencoded"
|
||
}
|
||
// 自定义响应处理器
|
||
this.success = successHandler
|
||
this.fail = failHandler
|
||
this.complete = completeHandler
|
||
// 自定义拦截器(请求、响应)
|
||
this.requestInterceptor = reqInterceptor
|
||
this.responseInterceptor = resInterceptor
|
||
}
|
||
// 请求type request/upload/download
|
||
async request(options, successHandler = null, failHandler = null, completeHandler = null){
|
||
const task = options.task || false
|
||
const type = options.type || "request"
|
||
// delete options.task
|
||
let config = null
|
||
try {
|
||
config = await requestConfig(this, options, successHandler, failHandler, completeHandler)
|
||
} catch (e) {
|
||
// reject the error
|
||
return Promise.reject(e)
|
||
}
|
||
if(!config || typeof config != 'object'){
|
||
return Promise.reject({})
|
||
}
|
||
|
||
const _this = this
|
||
if(task){
|
||
config["success"] = (response) => {
|
||
if (_this.responseInterceptor) {
|
||
_this.responseInterceptor(response, config)
|
||
}
|
||
_this.success && _this.success(response)
|
||
successHandler && successHandler(response)
|
||
}
|
||
config["fail"] = (response) => {
|
||
_this.fail && _this.fail(response)
|
||
failHandler && failHandler(response)
|
||
}
|
||
config["complete"] = (response) => {
|
||
_this.complete && _this.complete(response)
|
||
completeHandler && completeHandler(response)
|
||
}
|
||
if (type === "request"){
|
||
return uni.request(config)
|
||
}else if(type === "upload"){
|
||
return uni.uploadFile(config)
|
||
}else{
|
||
return uni.downloadFile(config)
|
||
}
|
||
return
|
||
}
|
||
|
||
return new Promise((resolve, reject) => {
|
||
config["success"] = (response) => {
|
||
let _res = null
|
||
if(_this.responseInterceptor){
|
||
_res = _this.responseInterceptor(response, config)
|
||
}
|
||
_this.success && _this.success(response)
|
||
successHandler && successHandler(response)
|
||
// 为了对reject的内容更加可控,增加了一个控制字段 wakaryReqToReject
|
||
if(_res.wakaryReqToReject){
|
||
delete _res.wakaryReqToReject
|
||
reject(_res)
|
||
}else{
|
||
resolve(_res)
|
||
}
|
||
}
|
||
config["fail"] = (error) => {
|
||
_this.fail && _this.fail(error)
|
||
failHandler && failHandler(error)
|
||
reject(error)
|
||
}
|
||
config["complete"] = (response) => {
|
||
_this.complete && _this.complete(response)
|
||
completeHandler && completeHandler(response)
|
||
}
|
||
if( type === "request"){
|
||
uni.request(config)
|
||
} else if(type === "upload"){
|
||
uni.uploadFile(config)
|
||
} else {
|
||
uni.downloadFile(config)
|
||
}
|
||
})
|
||
}
|
||
} |