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.
36 lines
906 B
36 lines
906 B
import isCallback from './isCallback'
|
|
import { forEach, tryCatch } from '../utils'
|
|
|
|
/**
|
|
* 分离请求对象
|
|
* @param {string|object} [url] 请求地址 / 请求配置
|
|
* @param {string|object} [data] 请求参数
|
|
* @param {object} [config] 请求配置
|
|
* @returns {object} 回调函数对象 去除回调的请求参数
|
|
*/
|
|
export default function detachConfig(url, data, config) {
|
|
// 回调函数对象
|
|
let callback = null
|
|
// 去除回调的请求参数对象
|
|
const options = {}
|
|
|
|
// 是否传入单个参数
|
|
const isSingle = typeof url === 'object'
|
|
|
|
// 请求参数对象
|
|
const value = isSingle ? url : { ...config, url, data }
|
|
|
|
// 分离请求参数
|
|
forEach(value, (val, key) => {
|
|
if (isSingle && isCallback(key)) {
|
|
;(callback || (callback = {}))[key] = tryCatch(val)
|
|
} else {
|
|
options[key] = val
|
|
}
|
|
})
|
|
|
|
return {
|
|
callback,
|
|
config: options
|
|
}
|
|
}
|
|
|