React native,setTimeout 在 useEffect 内部调用时发出奇怪的警告

React native, setTimeout gives weird warning when called inside useEffect

我最终想在应用执行 X 秒后满足特定条件时向用户显示模式。

然而,我在 android 上不断收到关于设置定时器很长一段时间(几分钟)的警告,但我的定时器只有几秒钟。

const surveyCheckTime = 3000; // X = 3 seconds

const App = () => {
  // First Time Modal State
  const [surveyVisibility, setSurveyVisibility] = useState(false);
  const handleSurveyOpen = () => {
    setSurveyVisibility(true);
  };
  const handleSurveyClose = () => {
    setSurveyVisibility(false);
  };

  useEffect(() => {
    const timer = setTimeout(() => {
      console.log('0:FROM_APP: Checking for condition: ');
      getData().then(
        keyValue => {
          console.log('0:FROM_APP: Completion status: ', keyValue);
          if (keyValue === 'false' || keyValue === undefined) {
            handleSurveyOpen();
          }
        },
        error => {
          // console.log('Survery_Error: ', error);
        },
      );
    }, surveyCheckTime);

    return () => clearTimeout(timer);
  }, []);

  return (
      <View>
         ...
        <SurveyModal
          surveyVisibility={surveyVisibility}
          handleSurveyClose={handleSurveyClose}
        />
      </View>
  )

getData() 是一个返回 keyValue 作为 promise 的异步函数。

export const getData = async (myKey = 'alreadyOpened') => {
  try {
    const value = await AsyncStorage.getItem(`@${myKey}`);
    if (value !== null) {
      // value previously stored
      // console.log('FROM__getData: Stored previously: ', value);
      return value;
    }
  } catch (e) {
    // error reading value
    console.log('ERROR:FROM__getData: Cannot read: ', e);
    return 'fasle';
  }
};

一切都很好,一切都按预期工作,但我每次都收到最后一行不同的警告:

(看到持续时间为 Y 毫秒的 setTimeout)Y 比我的 X 值高很多

个问题,但在我的案例中并不完全与 firebase 相关。 (虽然我确实使用 firebase 在另一个组件中获取数据,但 这不应该是问题这是问题

我已经研究过 this,但是大多数解决方案要么更改 "node_modules" 要么禁用警告,而且主题已经过时了。

如果有更高效的超时处理方案最好

编辑:"firebase":“7.13.1”是导致获取数据时出现问题的原因

我使用的是导致此问题的已弃用的 firebase 集成(网络配置而不是 .json 文件)