首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript函数未停止执行

JavaScript函数未停止执行
EN

Stack Overflow用户
提问于 2017-04-07 00:21:32
回答 2查看 221关注 0票数 0

我已经验证了,在某些情况下,第一个if条件为真。函数不应该返回true并停止执行吗?但是,在这种情况下,即使在第一个if条件为true之后,函数也会继续执行,直到forEach循环结束,然后退出,每次返回false。谁能告诉我错误在哪里?

代码语言:javascript
复制
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
}
EN

回答 2

Stack Overflow用户

发布于 2017-04-07 00:28:19

问题似乎是function scoping/closures的问题

我添加了一个"isValid“变量,它将在整个forEach函数中保持”有效性“。button => {}是一个有自己作用域的函数,它在每个pressedButtons上运行。仅从限定了作用域的函数返回return true,而不从checkValid函数返回。

代码语言:javascript
复制
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;
}
票数 0
EN

Stack Overflow用户

发布于 2017-04-07 00:29:25

你可以使用Promises来停止foreach循环。

代码语言:javascript
复制
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
  });

}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43260680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档