第一次迭代后setTimeout失败

时间:2014-05-14 20:24:25

标签: javascript

第一次迭代后,由于变量i未定义,因此setTimeout失败,因此我在控制台中看到pollundefined错误

请原谅,我是一个java人,对UI Side知之甚少

var symbols = [ "ONE","TWO"];
var i = 0;
$(document).ready(function () {
  callPoll();
});

function callPoll() {
  poll(symbols[i]);
  i++;
  if (i < symbols.length)
    setTimeout(callPoll, 1500);
}

setTimeout(callPoll, 3000);

function poll(value) {
  alert('poll'+value);
}

4 个答案:

答案 0 :(得分:5)

i未定义,symbols[i]未定义。您正在启动序列两次,一次是setTimeout(callPoll, 3000);,一次是$(document).ready。您正在设置一个在i超出symbols条目范围后触发的呼叫。删除对setTimeout的第一个电话。

    var symbols = [ "ONE","TWO"];
     var i = 0;
     $(document).ready(function () {
       callPoll();
     }
     );

     function callPoll() {

        poll(symbols[i]);
         i++;
         if (i < symbols.length) {
             setTimeout(callPoll, 1500);
         }
         else { 
             // reset cycle
             i = 0;
             setTimeout(callPoll, 3000);
         }
     }

     function poll(value)
     {
         alert('poll'+value);
     }

答案 1 :(得分:1)

您没有检查poll()是否在范围内,而是在调用i。像这样重新订购callPoll()

function callPoll() {
  if (i < symbols.length) {
    poll(symbols[i]);

    i++;
    setTimeout(callPoll, 1500);
  }
}

答案 2 :(得分:0)

是的,设置

 if (i < symbols.length-1)
             setTimeout(callPoll, 1500);

答案 3 :(得分:0)

这不是因为setTimeout的回调函数没有&#34;见&#34; i,但因为它超出symbols数组范围。

电话订单将是:

  1. 来自document.ready的callPoll;致电i == 1
  2. 之后 来自callPoll setTimeout
  3. callPoll;致电i == 2
  4. 之后
  5. 来自全球setTimeout的callPoll;输入i == 2,因此调用pollsymbols[2]未定义。