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