美文网首页
setTimeout那些你不知道的事(8.3)

setTimeout那些你不知道的事(8.3)

作者: 星期六1111 | 来源:发表于2017-08-03 21:41 被阅读36次
一. 应用背景:

今天改bug的时候,在react的组件中遇到这样的一段代码,本来设置5秒发一次请求,但实际上发请求的速度并不是设置的那样,甚至达到了几毫秒发一次请求。

 pollData (stack) {
    if (this.hasTaskProcess(stack.status)) {
      pollTimeout = setTimeout(()=>(this.onInit(stack._id)), 5000)
    } else {
      pollTimeout && clearTimeout(pollTimeout)
    }
  }

  onInit (stackId) {
    superagent
      .get(API_PREFIX + `/stack-definitions/status/${stackId}`)
      .use(noCache)
      .end((err, res) => {
        if (err) {
          throw err
        }
        this.pollData(res.body)
      })
  }
二. 分析过程

开始时,考虑的方向的javaScript 和react 的异步问题所导致的,将所有的异步代码改为同步的代码后,发现并没有什么用。。。。接着,因为代码是在react的里面写的,又开始考虑是react的生命周期导致的,因为在组件中使用react的两个生命周期函数,componentDidMount和componentDidUpdate,componentDidMount是肯定不会导致此问题的,但componentDidUpdate就有可能了,注释掉componentDidUpdate的代码,发现还是没有什么用的,这证明了和react并没有多大的联系。。。最后和小伙伴pair,两个人折腾了一个多小时,无解。。。最终老师告诉了我们答案,使用箭头函数把this.onInit(stack._id)包起来就好了,竟是这样。。。

三. 总结

  1. 在使用函数名作为调用句柄时都不能带参数。
function show(){      
    alert("Hello World");  
}  
setTimeout(show,1000);  

这段代码的效果是在1秒后显示hello world,但是如果改成 setTimeOut(show(),1000); 就会立即显示,达不到延时的效果了。但是如果加上引号就可以了。如: setTimeOut("show()",1000); 就可以了。但是如果带上参数的话,还是不行比如: setTimeOut("show(name)",1000)

  1. 带参数如何传值
  • 匿名函数
function show(name)  {
   alert("Hello World:" + name);
} 
setTimeout(()=>{ show(name)},1000);  
  • 定义返回无参函数的函数

   function show(name)  
   {alert("Hello World:" + name);}  
 
   function _show(name)  
   {  
       return function()  
       {  
           show(name);  
       }  
   }  
   setTimeout(_show(name),1000);  
  • 将参数写死为字符串,直接调用
setTimeout("fun1('parameters')", 100);

相关文章

  • setTimeout那些你不知道的事(8.3)

    一. 应用背景: 今天改bug的时候,在react的组件中遇到这样的一段代码,本来设置5秒发一次请求,但实际上发请...

  • 3.单线程 计时器

    我们不是在做导弹发射系统,请不要太在意精度 setTimeout的那些事 inweb社区

  • 你所不知道的setTimeout

    JavaScript提供定时执行代码的功能,叫做定时器(timer),主要由setTimeout()和setInt...

  • 你不知道的JavaScript -- setTimeout

    谈起setTimeout,就让我想起了一道经典的前端面试题 看到这几行代码,看过类似题目的大家肯定都知道结果是输出...

  • 过年那些事

    那些你不知道的关于年的事

  • 那些你不知道的事

    听说你要来这个城市了,我紧张都有点睡不着,于是很早早就起来了,特地去洗了个头发,而且很仔细的化了个妆。化的特别的慢...

  • 那些你不知道的事

    林花谢了春红,太匆匆。无奈朝来寒雨晚来风。 胭脂泪,相留醉,几时重。自是人生长恨水长东。 不经意见看到的词,有一种...

  • 你不知道的那些事

    在上海的某地方,有两个为了工作而辛苦奋斗的年轻人。 有一天晚上,女人对那个男人说:“老公,你说我们什么时候才可以不...

  • 你不知道的那些事

    * 今早四点多就醒了 看微信你没回我 然后又睡过去了梦到你回我了 结果六点多醒来你还没回我 然后又睡又梦到你回我了...

  • 那些你不知道的事

    1 还没到办公室,远远地就听到易数在呵斥病人家属,带着失控的情绪。我讶异地快步走进办公室,坐在角落里竖着耳朵细细听...

网友评论

      本文标题:setTimeout那些你不知道的事(8.3)

      本文链接:https://www.haomeiwen.com/subject/qvcmlxtx.html