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