105 lines
3.4 KiB
JavaScript
105 lines
3.4 KiB
JavaScript
|
|
import { requestConfig } from './common.js'
|
||
|
|
|
||
|
|
// attention: the success/fail/complete handler here for global or custom config in request is just for uni.request's success/fail/complete.
|
||
|
|
// it's not meaning the status of 200-300. status 400 from server is also success in uni.request
|
||
|
|
export default class Request {
|
||
|
|
constructor(config={}, reqInterceptor=null, resInterceptor=null, successHandler=null, failHandler=null, completeHandler=null) {
|
||
|
|
// base
|
||
|
|
this.baseUrl = config.baseUrl
|
||
|
|
// #ifdef H5
|
||
|
|
// this.baseUrl = '/api/'
|
||
|
|
// #endif
|
||
|
|
// this.header = config.header || {"Content-Type": "application/json;charset=UTF-8"},
|
||
|
|
this.header = config.header || {"Content-Type": "application/x-www-form-urlencoded"},
|
||
|
|
// global callback for success/fail/complete. They are also response interceptors.
|
||
|
|
this.success = successHandler
|
||
|
|
this.fail = failHandler
|
||
|
|
this.complete = completeHandler
|
||
|
|
// interceptors
|
||
|
|
this.requestInterceptor = reqInterceptor
|
||
|
|
this.responseInterceptor = resInterceptor
|
||
|
|
}
|
||
|
|
// type: request/upload/download.
|
||
|
|
// the success/fail/complete handler will not override the global, it will just call after global
|
||
|
|
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') {
|
||
|
|
// reject a blank object, if we do not reject it, it will be resolved
|
||
|
|
return Promise.reject({})
|
||
|
|
}
|
||
|
|
const that = this
|
||
|
|
if (task) {
|
||
|
|
config["success"] = (response) => {
|
||
|
|
if (that.responseInterceptor) {
|
||
|
|
that.responseInterceptor(response, config)
|
||
|
|
}
|
||
|
|
that.success && that.success(response)
|
||
|
|
successHandler && successHandler(response)
|
||
|
|
}
|
||
|
|
config["fail"] = (response) => {
|
||
|
|
that.fail && that.fail(response)
|
||
|
|
failHandler && failHandler(response)
|
||
|
|
}
|
||
|
|
config["complete"] = (response) => {
|
||
|
|
that.complete && that.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 (that.responseInterceptor) {
|
||
|
|
_res = that.responseInterceptor(response, config)
|
||
|
|
}
|
||
|
|
that.success && that.success(response)
|
||
|
|
successHandler && successHandler(response)
|
||
|
|
// use wakaryReqToReject to judge if reject or resolve
|
||
|
|
// now we can reject and resolve any what we want
|
||
|
|
if (_res.wakaryReqToReject) {
|
||
|
|
delete _res.wakaryReqToReject
|
||
|
|
reject(_res)
|
||
|
|
} else {
|
||
|
|
resolve(_res)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
config["fail"] = (error) => {
|
||
|
|
that.fail && that.fail(error)
|
||
|
|
failHandler && failHandler(error)
|
||
|
|
// it just return the fail error
|
||
|
|
// you could change it into your style
|
||
|
|
reject(error)
|
||
|
|
}
|
||
|
|
config["complete"] = (response) => {
|
||
|
|
that.complete && that.complete(response)
|
||
|
|
completeHandler && completeHandler(response)
|
||
|
|
}
|
||
|
|
if (type === "request") {
|
||
|
|
uni.request(config)
|
||
|
|
} else if (type === "upload") {
|
||
|
|
uni.uploadFile(config)
|
||
|
|
} else {
|
||
|
|
uni.downloadFile(config)
|
||
|
|
}
|
||
|
|
})
|
||
|
|
}
|
||
|
|
}
|