2016-10-18 72 views
0

我试图运行一个脚本,将等待循环调用1秒。但代码不会识别i参数。javascript - 调用回调参数

 for (var i = 0; i < lines.length; i++) { 
      var scanProgressInterval = setInterval(function(i) { 
      // Process the line, noting it might be incomplete. 
      if (lines[i].indexOf("(y/n)") > -1) { 
       console.log("includes (y/n)"); 
       ws.emit('scan', JSON.stringify({scan: false, question: lines[i]})); 
      } 
      else if (lines[i].indexOf("any key") > -1) { 
       console.log("any key"); 
       ws.emit('scan', JSON.stringify({scan: false, key: lines[i]})); 
      } 
      }, 1000); 
     } 

这段代码有什么问题?

+0

为什么不使用setTimeout与外部计数器并重复它,直到计数器达到0或1000或其他什么?不要让你的生活过于复杂。它已经够复杂了。 – Azamantes

+0

setInterval(function(i){ .......... },1000,i); 这将通过参数我到setInterval函数 – ShwethaU

回答

1

这里'我'是全球宣布。

尝试使用你的函数作为闭包。

 function scanProgressInterval(i){ 
      setInterval(function() { 
       // Process the line, noting it might be incomplete. 
       if (lines[i].indexOf("(y/n)") > -1) { 
        console.log("includes (y/n)"); 
        ws.emit('scan', JSON.stringify({scan: false, question: lines[i]})); 
       } 
       else if (lines[i].indexOf("any key") > -1) { 
        console.log("any key"); 
        ws.emit('scan', JSON.stringify({scan: false, key: lines[i]})); 
       } 
       }, 1000); 
     } 

    for (var i = 0; i < lines.length; i++) { 
      scanProgressInterval(i); 
     } 
+0

这工作完美。谢谢! – Mumfordwiz

0

你必须添加PARAMS背后的timout:

的setInterval(函数,毫秒,参数1,参数2,...)

here以获取更多信息。

0

i这里:setInterval(function(i) {...setInterval()功能,这意味着它有因为当调用回调函数的函数setInterval()里面没有价值的范围,就会产生没有传递的参数

您不需要将i作为回调参数setInterval()。只需将其删除即可,因为您已经可以在循环中访问i

+0

好吧,我会尝试。 – Mumfordwiz