UNPKG

@mypui/myp-ui

Version:

第一个高效且强悍的nvue开源组件库。做最好、最顺手的nvue组件库

91 lines (85 loc) 3.08 kB
import { requestConfig } from './common.js' export default class Request { constructor(config={}, reqInterceptor=null, resInterceptor=null, successHandler=null, failHandler=null, completeHandler=null) { this.baseUrl = config.baseUrl if (config.header) { // we must parse deep-copy header, then it can not be influenced by the-before request this.header = Object.assign({}, config.header) // JSON.parse(JSON.stringify(config.header)) } else { this.header = {"content-type": "application/json;charset=UTF-8"} } this.success = successHandler this.fail = failHandler this.complete = completeHandler // interceptors this.requestInterceptor = reqInterceptor this.responseInterceptor = resInterceptor } async request(options, successHandler=null, failHandler=null, completeHandler=null) { const task = options.task || false const type = options.type || "request" let config = null try{ config = await requestConfig(this, options) }catch(e){ const _res = (this.responseInterceptor && this.responseInterceptor({mypCancel: true, response: e}, options)) || {mypCancel: true, response: e} _callbackWrapper(_res, [this.fail, failHandler, this.complete, completeHandler]) return Promise.reject(_res) } if (config.mypReqToCancel) { const _res = (this.responseInterceptor && this.responseInterceptor({mypCancel: true, response: config}, options)) || {mypCancel: true, response: config} _callbackWrapper(_res, [this.fail, failHandler, this.complete, completeHandler]) return Promise.reject(_res) } if (task) { const cg = _configWrapper(null, null, config, options, this.responseInterceptor, [this.success, successHandler, this.complete, completeHandler], [this.fail, failHandler, this.complete, completeHandler]) const f = _requestWrapper(type) return f(cg) } return new Promise((resolve, reject) => { const cg = _configWrapper(resolve, reject, config, options, this.responseInterceptor, [this.success, successHandler, this.complete, completeHandler], [this.fail, failHandler, this.complete, completeHandler]) const f = _requestWrapper(type) f(cg) }) } } function _callbackWrapper(res, fns) { fns.forEach(fn => { fn && fn(res) }) } function _configWrapper(resolve, reject, config, options, interceptor, sucFns, failFns) { config["success"] = (response) => { let _res = response if (interceptor) { _res = interceptor(response, options) } if (_res && _res.mypReqToReject) { delete _res.mypReqToReject _callbackWrapper(_res, failFns) reject && reject(_res) } else { _callbackWrapper(_res, sucFns) resolve && resolve(_res) } } config["fail"] = (response) => { let _res = response if (interceptor) { _res = interceptor({mypFail: true, response: response}, options) } delete _res.mypReqToReject _callbackWrapper(_res, failFns) reject && reject(_res) } return config } function _requestWrapper(type) { if (type === 'request') { return uni.request } else if (type === 'upload') { return uni.uploadFile } else { return uni.downloadFile } }