Javascript 从匿名函数中断while循环
我是javascript新手,我的背景是python和ruby,我在处理javascript匿名函数时遇到问题,我的问题如下: 我在页面中有一个元素,它有一个属性值(true/false),我需要继续执行一个操作,直到这个属性改变值 我尝试的代码如下所示,您可以猜到,如果Javascript 从匿名函数中断while循环,javascript,nightwatch.js,Javascript,Nightwatch.js,我是javascript新手,我的背景是python和ruby,我在处理javascript匿名函数时遇到问题,我的问题如下: 我在页面中有一个元素,它有一个属性值(true/false),我需要继续执行一个操作,直到这个属性改变值 我尝试的代码如下所示,您可以猜到,如果result.value==true,则中断不会退出循环。。。知道我的方向对不对吗 var counter = 0; while (counter < 5) { this .click('#someelemen
result.value==true
,则中断
不会退出循环。。。知道我的方向对不对吗
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);
};
var计数器=0;
while(计数器<5){
这
。单击(“#someelementid”)
计数器++;
这
.getAttribute('#someelementid',disabled',函数(结果){
如果(result.value='true'){
这是休息;
}
}.约束(这个);
本.api.pause(1000);
};
我的假设是,通过绑定它,我可以访问while块?如果我错了,请纠正我。您是否尝试过将代码更改为以下内容
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;
}
}
);
}
您是否尝试过将代码更改为以下内容
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;
}
}
);
}
函数内部的中断不会中断函数外部的循环 通过getAttribute()内联获取结果,而不是回调。然后你可以破坏这个函数 或 有一个全局变量<代码>中断循环=错误代码>将其设置为true;在回调函数内部。在while循环中检查这个变量<代码>while(!breakLoop..) 另一种方法 完全没有循环
var counter = 0;
function doSomething(){
this.click('#someelementid');
counter++;
this.getAttribute('#someelementid', 'disabled', function(result) {
if(result.value != 'true' && counter<5){
this.api.pause(1000);
doSomething();
}
}.bind(this);
};
var计数器=0;
函数doSomething(){
单击(“#someelementid”);
计数器++;
this.getAttribute('#someelementid',disabled',函数(结果){
if(result.value!=“true”&&counter函数内部的中断不会中断函数外部的循环
通过getAttribute()以内联方式获取结果,而不是回调。然后可以中断该函数
或
在回调函数中有一个全局变量。breakLoop=false;
将其设置为true;。并在while循环中检查此变量。while(!breakLoop..)
另一种方法
完全没有循环
var counter = 0;
function doSomething(){
this.click('#someelementid');
counter++;
this.getAttribute('#someelementid', 'disabled', function(result) {
if(result.value != 'true' && counter<5){
this.api.pause(1000);
doSomething();
}
}.bind(this);
};
var计数器=0;
函数doSomething(){
单击(“#someelementid”);
计数器++;
this.getAttribute('#someelementid',disabled',函数(结果){
如果(result.value!='true'&&counter我有,尽管即使将计数器设置为5,它似乎也没有中断…不确定为什么..我用适合我的解决方案编辑了答案,请尝试实现它。酷,我已经成功地使它工作了,非常感谢您的帮助!我有,尽管即使将计数器设置为5,它似乎也没有中断。…不知道为什么..我已经用对我有效的解决方案编辑了答案,请尝试实现它。很好,我已经设法让它工作了,非常感谢你的帮助!能否给出一个示例,说明如何内联获得结果,而不是回调?我正在尝试自己解决问题,但如果你能将我发送到ri,我会很有帮助ght方向我认为您正在使用的nightwatch框架不支持这样的内联api。您可以尝试第二个选项,使用全局变量来中断循环。是否可以给出一个示例,说明如何内联获取结果,而不是回调?我正在尝试自己弄清楚,但如果您可以将我发送到正确的方向我认为你正在使用的nightwatch框架不支持这样的内联api。你可以尝试第二个选项,使用全局变量来打破循环。