window.setInterval只执行一次是什么原因

KenOscar
  • 883

有一个需求 需要定时轮询后台数据

  //定时轮询更新地图数据
     window.setInterval(getTerminalBeltData(),5000);
function getTerminalBeltData(){
    console.log('执行定时方法');
    var statusCount = 0;
    var beltCount = 0;
    var content = new Array();
    var normalStatus = 0;
    var abnormalStatus = 0;
    var noStatus = 0;
    new AjaxRequest({
      type: "get",
      url:'api/terminal/list.json',
      callBack: function (res) {
        if(res.result.terminalList.length != 0){
          for(var i = 0;i < res.result.terminalList.length;i++){
            if(res.result.terminalList[i].beltList.length != 0){
              for(var j = 0;j < res.result.terminalList[i].beltList.length;j++) {
                var beltData = res.result.terminalList[i].beltList[j];
                content[beltCount] = {
                  "皮带秤名称": "",
                  "皮带秤型号": "",
                  "皮带秤相关说明": "",
                  "皮带秤今日运输量(吨)": "",
                  "皮带定点监控": "",
                  "皮带周边监控": "",
                  "泊位周边监控": '',
                  "ELON": 12,
                  "ELAT": 1,
                  'beltId':'',
                  'company-terminal-Name':'',
                  "wkzt": '',
                  "gdzt": '',
                  "tzzt": '',
                  "slzt": '',
                  "jlzt": '',
                  "txzt": '',
                  "sbzt": ''
                }
                content[beltCount]['皮带秤名称'] = beltData['beltName'];
                content[beltCount]['皮带秤型号'] = beltData['modelName'];
                content[beltCount]['皮带秤相关说明'] = beltData['beltModel'];
                content[beltCount]['皮带秤今日运输量(吨)'] = beltData['beltModel'];
                content[beltCount]['皮带定点监控'] = '查看监控' + beltData['belt_fixed'];
                content[beltCount]['泊位周边监控'] = '查看监控' + beltData['berth_around'];
                content[beltCount]['皮带周边监控'] = '查看监控' + beltData['belt_around'];
                content[beltCount]['ELON'] = beltData['longitude'];
                content[beltCount]['ELAT'] = beltData['latitude'];
                content[beltCount]['beltId'] = beltData['beltId'];
                content[beltCount]['company-terminal-Name'] = res.result.terminalList[i]['companyName'] + '---'+ res.result.terminalList[i]['terminalName'];
                beltCount++;
              }
            }
          }

我这样写 为什么只有页面加载之后执行一次 之后就不行了呢

回复
阅读 4.2k
11 个回答
WytheChan
  • 766
✓ 已被采纳

window.setInterval(getTerminalBeltData(),5000) =====> 改成 window.setInterval(getTerminalBeltData,5000) 方法名后面的括号不需要

setTimeout()本来就只执行一次,延迟函数。你要想让它执行多次,就递归,或者也可以使用定时函数。

用 setInterval , timeout 就一次 没毛病.

setInterval才会连续执行

那个方法就是执行一次,用这个window.setInterval(getTerminalBeltData(),5000);

getTerminalBeltData()这是一个函数调用,函数调用就会有返回值,而getTerminalBeltData()没有返回值,所以这里的getTerminalBeltData()是一个undefined,自然你想要的循环执行getTerminalBeltData()这个函数就不会发生。
改成:
window.setInterval(getTerminalBeltData,5000);

Jakeyu
  • 277

getTerminalBeltData() 返回undefuned,所以就相当于window.setInterval(undefuned,5000);

window.setInterval(getTerminalBeltData,5000);

你可以这样写

setInterval(getTerminalBeltData,5000);

或者

setInterval("getTerminalBeltData()",5000);

setInterval的语法:

window.setInterval(func, delay)

要么,你将底下的那一坨当作第一个参数,如果你向封装成一个方法,就使用getTerminalBeltData。getTerminalBeltData()的作用是执行该函数

xiaohailong
  • 2
新手上路,请多包涵

setInterval(getTerminalBeltData,5000);
getTerminalBeltData 不要加(),加括号就执行了。

宣传栏