基于 Promise 单例的业务封装

103 阅读1分钟

背景

在正常业务中经常会出现一些例如环境校验的逻辑,环境判断又来源于后端,前端需要根据环境处理不同逻辑,这个时候就需要封装一个公共能力,并且能做到前端无感知调用。

一个全局能力的封装。内容只写了一个简单的业务逻辑处理,基于 react。

简略代码实现

/**
 * 请求数据源
 */
const PromiseSingleton = new Promise(async (resolve, reject) => {
  try {
    const getSomething = await getSomeRequest();
    resolve(getSomething);
  }catch (e) {
    reject(e);
  }
});

/**
 * 校验某个环境,
 */
export const hasSomeAuth = async () => {
  try {
    const value = await PromiseSingleton;
    // 处理 value 本处省略
    return true;
  } catch (e) {
    return false;
  }
};

/**
 * 封装hooks
 */
export const useSomeEnvCheckHooks = () => {
  const [status, setStatus] = useState(false);
  useEffect(() => {
    checkAuth();
  }, []);
  
  const checkAuth = () => {
    hasSomeAuth().then((res) => {
      setStatus(res);
    });
  };
  return status;
};

// 组件内部使用
const envCheck = useSomeEnvCheckHooks();