javascript - 从匿名函数中中断 while 循环

标签 javascript nightwatch.js

我是 javascript 新手,我的背景是 python 和 ruby​​,我在处理 javascript 匿名函数时遇到问题,我的问题如下:

我的页面中有一个元素具有属性值(true/false),我需要继续执行操作,直到该属性更改值。

我尝试过的代码如下,正如您所猜测的,如果result.value == truebreak将不会退出循环...任何知道我的方向是否正确?

var counter = 0;
while (counter < 5) {
  this
    .click('#someelementid')
  counter++;
  this
    .getAttribute('#someelementid', 'disabled', function(result) {
      if (result.value == 'true') {
        this.break;
      }
    }.bind(this));
  this.api.pause(1000);
};

我的假设是,通过绑定(bind)它,我可以访问 while block ?如果我错了,请纠正我。

最佳答案

您是否尝试过将代码更改为如下所示?

var counter = 0;
var arr = [1, 2, 3, 4, 5];
while (counter < 5) {
  arr.forEach(
    (element) => {
      if (counter < 5) { // if you don't have this it will print all 5, else it prints only 3
        console.log('Element value:', element);
      }
      if (element == 3) {
        counter = 5;
      }
    }
  );
}

发生的事情是这样的:

当您进入while循环时,它将进入forEach循环并开始迭代,当到达element == 3时,它将设置counter5,但它仍然必须完成当前的 forEach 循环,一旦完成就不会再执行另一个 while 循环因此退出它。

因此将您的代码更改为:

var counter = 0;
while (counter < 5) {
  this
    .click('#someelementid')
  counter++;
  this
    .getAttribute('#someelementid', 'disabled', function(result) {
      if (result.value == 'true') {
        counter = 5; // This should do the trick (without 'this')
      }
    }.bind(this));
  this.api.pause(1000);
};

关于javascript - 从匿名函数中中断 while 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46237870/

相关文章:

javascript - 在 Knockout JS 中触发子属性的订阅事件

javascript - 为什么 'call()' 会向 Function 的实例添加属性?? (见小代码)

javascript - 使用条件将属性从一个对象复制到另一个对象

javascript - 使用 AngularJS 删除 JSON 键和值中的前导空格

javascript - 如何清除 Nightwatch 中的页面 session 存储

javascript - 在 Angular 中绑定(bind) JSON 数据

javascript - nightwatchjs - 如何检测隐藏的 html 元素?

javascript - 限制 Selenium 元素搜索等待时间的正确方法

javascript - NightwatchJS "freezes"

javascript - 装有NPM的jQuery抛出$ .ajax不是函数