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