import { useEffect, useRef } from 'react';

export function useAbortController() {
  const controllerRef = useRef<AbortController | null>(null);

  // 获取AbortSignal实例
  const getSignal = () => {
    if (!controllerRef.current) {
      controllerRef.current = new AbortController();
    }
    return controllerRef.current.signal;
  };

  // 中止所有请求
  const abortAll = () => {
    if (controllerRef.current) {
      controllerRef.current.abort();
      controllerRef.current = null;
    }
  };

  // 创建新的Controller，并中止之前的请求
  const recreate = () => {
    abortAll();
    controllerRef.current = new AbortController();
    return controllerRef.current.signal;
  };

  // 组件卸载时自动中止所有请求
  useEffect(() => {
    return () => {
      abortAll();
    };
  }, []);

  return {
    getSignal,
    abortAll,
    recreate
  };
} 