我已经确认在某些时候第一个if条件为真。函数不应该返回true并停止执行吗?然而;在这种情况下,即使在第一个if条件为真之后,该函数仍继续执行,直到forEach循环结束,然后每次退出返回false。有人能告诉我错误在哪里吗?
function checkValid(id){
pressedButtons.forEach(button => {
console.log(`ID: ${id} and Button: ${button}`)
if (id == button+1 || id == button+8 || id == button-1 || id == button-8){
console.log("IM HERE")
return true
}
})
return false
}
答案 0 :(得分:0)
问题似乎是function scoping/closures
我添加了一个“isValid”变量,它将在整个forEach函数中保持“有效性”。 button => {}
是一个函数,它有自己的范围,可以在每个pressedButtons
上运行。 return true
仅从作用域函数返回,而不是checkValid函数。
function checkValid(id){
var isValid = false;
pressedButtons.forEach(button => {
console.log(`ID: ${id} and Button: ${button}`)
if (id == button+1 || id == button+8 || id == button-1 || id == button-8){
console.log("IM HERE")
isValid = true;
}
})
return isValid;
}
答案 1 :(得分:0)
你可以在此使用Promise来停止前进的foreach循环。
function checkValid(id){
var promises= [];
pressedButtons.forEach(button => {
return new Promise(function(resolve, reject){
console.log(`ID: ${id} and Button: ${button}`)
if (id == button+1 || id == button+8 || id == button-1 || id == button-8){
console.log("IM HERE")
resolve(true);
}
});
});
Promise.race(promises).then(function(result){
// as soon as any promise resolves it will fall here
});
}