import { message } from 'antd' import moment from 'moment' import { useRequest } from 'umi' interface Options { manual?: boolean,//手动模式true开启 pollingInterval?: number,//轮询间隔,单位为毫秒。设置后,将进入轮询模式,定时触发 run pollingWhenHidden?: boolean,//在页面隐藏时,是否继续轮询。默认为 true,即不会停止轮询 debounceInterval?: number,//防抖间隔, 单位为毫秒,设置后,请求进入防抖模式。 throttleInterval?: number,//节流间隔, 单位为毫秒,设置后,请求进入节流模式。 cacheKey?: string,//请求唯一标识。如果设置了 cacheKey启用缓存机制 onSuccess?: (data: any, params: any[]) => void,//service resolve 时触发,参数为 data 和 params onError?: (error: Error, params: any[]) => void,//service 报错时触发,参数为 error 和 params。 formatResult?: boolean,//格式化请求结果 initialData?: any,//默认的 data msgNmae?: string, } /** * * @param fnc * @param options:Options * @param manual?: boolean,//手动模式true开启 * @param pollingInterval?: number,//轮询间隔,单位为毫秒。设置后,将进入轮询模式,定时触发 run * @param pollingWhenHidden?: boolean,//在页面隐藏时,是否继续轮询。默认为 true,即不会停止轮询 * @param debounceInterval?: number,//防抖间隔, 单位为毫秒,设置后,请求进入防抖模式。开启后then获取不到res * @param throttleInterval?: number,//节流间隔, 单位为毫秒,设置后,请求进入节流模式。开启后then获取不到res * @param cacheKey?: string,//请求唯一标识。如果设置了 cacheKey启用缓存机制 * @param onSuccess?: (data: any, params: any[]) => void,//service resolve 时触发,参数为 data 和 params * @param onError?: (error: Error, params: any[]) => void,//service 报错时触发,参数为 error 和 params。 * @param formatResult?: boolean,//格式化请求结果 * @param initialData?: any,//默认的 data * @param msgNmae?: string,//操作完成提示文字 * */ export function useAjax(fnc: (params?: any) => Promise, options?: Options) { const ajax = useRequest(fnc, { manual: options?.manual || true, cacheKey: options?.cacheKey, pollingInterval: options?.pollingInterval || undefined, debounceInterval: options?.debounceInterval || undefined, // throttleInterval:500, formatResult: (res) => { let reqTime = moment().format('YYYY-MM-DD HH:mm:ss') return options?.formatResult ? {...res,reqTime} : res?.data }, onSuccess: (res) => { if (res) { options?.msgNmae && message.success(options?.msgNmae + '成功!', 2) } return null }, onError: () => { } }) return ajax }