天天看点

关于setTimeout用法问题

有些疑惑,网上关于setTimeout用法和我真实的用法有些不同,我小结一下

用法源于https://www.runoob.com/jsref/met-win-settimeout.html

这是我在做echarts异步加载数据时遇到的问题——数据获取时间不一样。

当时做一个项目需要ajax获取数据库数据,一共有两个ajax,一个瞬间完成,但另外一个需要5-6s才完成,原因是数据量大,我需要用sql中的sum求和数据。因此验收那边需要我弄加载动画,让两边看起来更为协调

先附上正确代码以及效果(如下),数据是获取了,但强行加了个加载动画,myChart是我绑定div的变量

myChart.setOption(option);//设置动画
    setTimeout(function(){myChart.hideLoading();},3000);//设置时间
           
关于setTimeout用法问题

之所以会懵逼一天,是因为我先看其他博客如何使用这个setTimeout,却没看函数官方使用文档

一开始是看这个博客的 https://blog.csdn.net/qq_28256783/article/details/80097092

这篇文章中先写到如下调用方法,是可以正常运行的。但是将alert函数改成我自己的函数,会报如下错误,变量未定义

<html>
    <body bgcolor=lightcyan text=red>
        <h1>
            <font color=blue>示范网页</font>
        </h1>
        <p>
        </br>
        <p> 请等三秒!
        <script>
            setTimeout("alert('对不起, 要你久候')", 3000 )
        </script>
    </body>
</html>
           
setTimeout("myChart.hideLoading()",3000);
           
关于setTimeout用法问题

我尝试改成没有双引号,运行没有报错,但没有定时效果,而是直接执行hideLoading()函数

setTimeout(myChart.hideLoading(),3000);
           

最终通过看官方使用文档,发现需要加上function({}),运行成功。

我的理解是setTimeout里的函数如果含有变量或对象的,需要function({})

补充一下,另外一位博主写的。setTimeout里直接用函数名,不需要加括号

关于setTimeout用法问题
此处引用https://blog.csdn.net/lihchweb/article/details/94635720