如果应用执行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';
}
};
一切都很好,一切都按预期进行,但我每次都在不同的最后一行收到此警告:
(看到setTimeout的持续时间为Y ms)Y远高于我的X值
有this个问题,但就我而言,它与Firebase并不完全相关。 (尽管我确实使用firebase来获取另一个组件中的数据,但这不应该成为问题。)这是问题
我已经研究过this,但是大多数解决方案要么更改了“ node_modules”,要么禁用了警告,因此该主题已经过时了。
最好是有一种更有效的超时解决方案。
编辑:“ firebase”:“ 7.13.1”是导致获取数据时出现问题的原因
答案 0 :(得分:0)
我使用了过时的Firebase集成,这导致了此问题(Web配置而不是.json文件)