实现每隔两秒轮询查询接口返回结果

72 阅读1分钟

实现每隔两秒轮询查询接口返回结果是否成功,成功就展示结果,未成功继续轮询查询

useEffect(() => {
    if (isOpen) {
      //开启轮询查询
      LoopSearch();
    } else {
      //清除輪詢
      clearInterval(timer);
    }
    //弹窗关闭销毁循环定时器
    return () => {
      clearInterval(timer);
    };
  }, [isOpen]);

  /**
   * @description: 轮询查询新建导入数据结果
   * @return {*}
   */
  const LoopSearch = () => {
    timer = setInterval(() => {
      //查找新建导入数据是否成功
        allApi?.getResultApi({ settlementTransferId: isCreateId })
        .then((res) => {
          //查询新建导入成功
          if (res?.data?.finish) {
            //清除轮询查询
            clearInterval(timer);
            //存在重複的結算轉賬編號
            if (res?.data?.repeatedSettlementTransferDetailNo?.length > 0) {
              //彈窗提示重複的編號
              setIsTipsModal(true);
              setRepeatDetail(res?.data);
            } else {
              //創建导入成功不存在重複,直接跳转到详情界面
              history.push({
                pathname: `/payMent/detail/${isCreateId}`,
              });
            }
          }
        })
        .catch((e) => {
          console.log(e);
          //接口失敗停止輪詢
          clearInterval(timer);
          setIsCreating(false);
        });
    }, 2000);
  };