1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- import buildURL from '../helpers/buildURL'
- import buildFullPath from '../core/buildFullPath'
- import settle from '../core/settle'
- import { isUndefined } from '../utils'
- /**
- * 返回可选值存在的配置
- * @param {Array} keys - 可选值数组
- * @param {Object} config2 - 配置
- * @return {{}} - 存在的配置项
- */
- const mergeKeys = (keys, config2) => {
- const config = {}
- keys.forEach((prop) => {
- if (!isUndefined(config2[prop])) {
- config[prop] = config2[prop]
- }
- })
- return config
- }
- export default (config) => new Promise((resolve, reject) => {
- const fullPath = buildURL(buildFullPath(config.baseURL, config.url), config.params)
- const _config = {
- url: fullPath,
- header: config.header,
- complete: (response) => {
- config.fullPath = fullPath
- response.config = config
- try {
- // 对可能字符串不是json 的情况容错
- if (typeof response.data === 'string') {
- response.data = JSON.parse(response.data)
- }
- // eslint-disable-next-line no-empty
- } catch (e) {
- }
- settle(resolve, reject, response)
- }
- }
- let requestTask
- if (config.method === 'UPLOAD') {
- delete _config.header['content-type']
- delete _config.header['Content-Type']
- const otherConfig = {
- // #ifdef MP-ALIPAY
- fileType: config.fileType,
- // #endif
- filePath: config.filePath,
- name: config.name
- }
- const optionalKeys = [
- // #ifdef APP-PLUS || H5
- 'files',
- // #endif
- // #ifdef H5
- 'file',
- // #endif
- // #ifdef H5 || APP-PLUS
- 'timeout',
- // #endif
- 'formData'
- ]
- requestTask = uni.uploadFile({ ..._config, ...otherConfig, ...mergeKeys(optionalKeys, config) })
- } else if (config.method === 'DOWNLOAD') {
- // #ifdef H5 || APP-PLUS
- if (!isUndefined(config.timeout)) {
- _config.timeout = config.timeout
- }
- // #endif
- requestTask = uni.downloadFile(_config)
- } else {
- const optionalKeys = [
- 'data',
- 'method',
- // #ifdef H5 || APP-PLUS || MP-ALIPAY || MP-WEIXIN
- 'timeout',
- // #endif
- 'dataType',
- // #ifndef MP-ALIPAY
- 'responseType',
- // #endif
- // #ifdef APP-PLUS
- 'sslVerify',
- // #endif
- // #ifdef H5
- 'withCredentials',
- // #endif
- // #ifdef APP-PLUS
- 'firstIpv4'
- // #endif
- ]
- requestTask = uni.request({ ..._config, ...mergeKeys(optionalKeys, config) })
- }
- if (config.getTask) {
- config.getTask(requestTask, config)
- }
- })
|