You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
97 lines
2.9 KiB
97 lines
2.9 KiB
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) |
|
} |
|
})
|
|
|