我试图运行一个在循环调用之间等待1秒的脚本。但代码不会识别i参数。
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 :(得分: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);
}
答案 1 :(得分:0)
答案 2 :(得分:0)
您的i
此处:setInterval(function(i) {...
属于setInterval()
函数的范围,这意味着它没有值,因为在setInterval()
内调用回调函数时功能,它将无参数传递。
您无需将i
作为回调参数放在setInterval()
中。只需删除它,因为您已经可以在循环内访问i
。