Flash setInterval 问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flash setInterval 问题相关的知识,希望对你有一定的参考价值。

如果我在一帧中使用setInterval函数对于本帧内的对象进行操作(无stop语句还其他跳转语句),那么flash会一直停留在此帧上进行setInterval的操作还是会继续进行下帧。

这要视你的影片结构而定,如果你的影片只有一帧,那么该影片是不会做循环播放的,也就是说写在这帧的脚本只执行一遍然后就完了,如果你写的是setInterval语句,那么就只执行一次这语句,然后就定时调用设置的操作。
如果你的影片有多帧的话,在没有写stop的情况下就会循环执行了影片帧的脚本了。也就是说会多次执行你写的setInterval语句。
这个其实你可以用trace来输出一下信息也可以知道。
参考技术A 如果用了setInterval,只要不清除就一直有效

没有STOP当然会继续一下帧,setInterval只是循环调用函数

Fetch 和 setInterval 反应钩子问题

【中文标题】Fetch 和 setInterval 反应钩子问题【英文标题】:Fetch and setInterval react hooks problem 【发布时间】:2021-01-16 12:49:03 【问题描述】:

我最近使用带有 React 的钩子从服务器获取数据,但我遇到了钩子问题。代码看起来是正确的,但看起来 useEffect 不是第一次调用而是在 setInterval 3 秒后调用。在它出现之前,我有 3 秒钟的空白表。我想直接显示数据,3秒后调用。

正确的使用方法是什么?

const [datas, setDatas] = useState([] as any);

  useEffect(() => 
    const id = setInterval(() => 
        const fetchData = async () => 
          try 
            const res = await fetch(URL);
            const json = await res.json();
            setDatas(jsonData(json));
           catch (error) 
            console.log(error);
          
        ;
        fetchData();
    , TIME)

    return () => clearInterval(id);
  , [])

【问题讨论】:

【参考方案1】:

使用 React Hooks:

  const [seconds, setSeconds] = useState(0)

  const interval = useRef(null)

  useEffect(() =>  if (seconds === 60) stopCounter() , [seconds])

  const startCounter = () => interval.current = setInterval(() => 
    setSeconds(prevState => prevState + 1)
  , 1000)

  const stopCounter = () => clearInterval(interval.current)

【讨论】:

【参考方案2】:

您需要在初始时间间隔之外调用一次fetchData。在区间外定义fetchData

useEffect(() => 
  // (1) define within effect callback scope
  const fetchData = async () => 
    try 
      const res = await fetch(URL);
      const json = await res.json();
      setDatas(jsonData(json));
     catch (error) 
      console.log(error);
    
  ;
    
  const id = setInterval(() => 
    fetchData(); // <-- (3) invoke in interval callback
  , TIME);

  fetchData(); // <-- (2) invoke on mount

  return () => clearInterval(id);
, [])

【讨论】:

以上是关于Flash setInterval 问题的主要内容,如果未能解决你的问题,请参考以下文章

HTML DOM setInterval()和clearInterval() 方法

HTML DOM setInterval()和clearInterval() 方法

setTimeout代替setInterval的写法以及setInterval的弊端以及越来越快的解决办法

javascript定时器详解

javascript线程解释(setTimeout,setInterval你不知道的事)

关于定时器的那些事!