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) } }) } }