useAjax.tsx 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import { message } from 'antd'
  2. import moment from 'moment'
  3. import { useRequest } from 'umi'
  4. interface Options {
  5. manual?: boolean,//手动模式true开启
  6. pollingInterval?: number,//轮询间隔,单位为毫秒。设置后,将进入轮询模式,定时触发 run
  7. pollingWhenHidden?: boolean,//在页面隐藏时,是否继续轮询。默认为 true,即不会停止轮询
  8. debounceInterval?: number,//防抖间隔, 单位为毫秒,设置后,请求进入防抖模式。
  9. throttleInterval?: number,//节流间隔, 单位为毫秒,设置后,请求进入节流模式。
  10. cacheKey?: string,//请求唯一标识。如果设置了 cacheKey启用缓存机制
  11. onSuccess?: (data: any, params: any[]) => void,//service resolve 时触发,参数为 data 和 params
  12. onError?: (error: Error, params: any[]) => void,//service 报错时触发,参数为 error 和 params。
  13. formatResult?: boolean,//格式化请求结果
  14. initialData?: any,//默认的 data
  15. msgNmae?: string,
  16. }
  17. /**
  18. *
  19. * @param fnc
  20. * @param options:Options
  21. * @param manual?: boolean,//手动模式true开启
  22. * @param pollingInterval?: number,//轮询间隔,单位为毫秒。设置后,将进入轮询模式,定时触发 run
  23. * @param pollingWhenHidden?: boolean,//在页面隐藏时,是否继续轮询。默认为 true,即不会停止轮询
  24. * @param debounceInterval?: number,//防抖间隔, 单位为毫秒,设置后,请求进入防抖模式。开启后then获取不到res
  25. * @param throttleInterval?: number,//节流间隔, 单位为毫秒,设置后,请求进入节流模式。开启后then获取不到res
  26. * @param cacheKey?: string,//请求唯一标识。如果设置了 cacheKey启用缓存机制
  27. * @param onSuccess?: (data: any, params: any[]) => void,//service resolve 时触发,参数为 data 和 params
  28. * @param onError?: (error: Error, params: any[]) => void,//service 报错时触发,参数为 error 和 params。
  29. * @param formatResult?: boolean,//格式化请求结果
  30. * @param initialData?: any,//默认的 data
  31. * @param msgNmae?: string,//操作完成提示文字
  32. *
  33. */
  34. export function useAjax(fnc: (params?: any) => Promise<any>, options?: Options) {
  35. const ajax = useRequest(fnc, {
  36. manual: options?.manual || true,
  37. cacheKey: options?.cacheKey,
  38. pollingInterval: options?.pollingInterval || undefined,
  39. debounceInterval: options?.debounceInterval || undefined,
  40. // throttleInterval:500,
  41. formatResult: (res) => {
  42. let reqTime = moment().format('YYYY-MM-DD HH:mm:ss')
  43. return options?.formatResult ? {...res,reqTime} : res?.data
  44. },
  45. onSuccess: (res) => {
  46. if (res) {
  47. options?.msgNmae && message.success(options?.msgNmae + '成功!', 2)
  48. }
  49. return null
  50. },
  51. onError: () => {
  52. }
  53. })
  54. return ajax
  55. }