节点函数未中断循环
Node functions not breaking loop
我正在做一个webdriverjs应用程序,我想检查jQuery何时在页面上完成。以下是我的方法,但即使其他人应该拿起它来停止循环,它也不会中断。循环没有停止。我想做错了什么
isjQueryAjaxFinished: function(driver) {
driver.exec('return window.jQuery != undefined && jQuery.active === 0', function(res) {
console.log(res);
return res;
});
},
waitForjQueryAjaxToFinish: function(driver, reason) {
maxTries = 30;
for (i=0; i<maxTries; i++) {
this.isjQueryAjaxFinished(driver, function(res) {
if(res === false) {
driver.sleep(1000).then(function() {
console.log(reason + finished);
});
} else {
return;
}
});
}
}
基本上我想要的是,如果isjQueryAjaxFinished在1秒内返回假睡眠,然后重试。如果返回true,则继续。就像我上面说的,无论是真是假,它都会保持循环,并且刚好达到for循环的极限。感谢
Driver.sleep是异步的。睡眠呼叫期间循环仍在继续。一旦回调在睡眠时被调用,循环早就结束了。一种解决方案是使用递归(请注意,在最初调用函数时不需要为"i"提供值)。(免责声明:下面的代码未经测试…但你明白了。)
var maxTries = 30;
waitForjQueryAjaxToFinish: function(driver, reason, i) {
var iteration = i || 0;
_self = this;
this.isjQueryAjaxFinished(driver, function(res) {
if(res === false) {
driver.sleep(1000).then(function() {
console.log(reason);
if(iteration < maxTries) {
_self.waitForjQueryAjaxToFinish(driver, reason, iteration + 1);
} else {
console.log("Sorry...tried " + maxTries + "times but still no luck.");
return;
}
});
} else {
return;
}
});
}
}
这种方法的一个优点是它是非阻塞的。
相关文章:
- 中断javascript循环
- 当使用return语句时,循环不会中断
- Javascript数组推送中断循环
- 为什么内部Javascript循环会阻止外部循环中断(即无限循环)
- Javascript代码中断循环
- 在循环顶部中断循环的显式条件
- 完成ajax调用数组的循环,而不是在某个调用出错时中断
- Node.js中的中断繁忙循环
- 数据角色中断”;对于循环'为什么?
- 从匿名函数中中断for循环
- 循环不应在遇到无效语句时中断
- 如何在返回值(Js)时不中断函数/循环
- 角度:如何从外循环从内循环中断
- 如何在中断之前遍历此 for 循环中的所有城市?现在它只是迭代一个
- 中断语句仅删除第二个循环
- JavaScript 在循环输入后中断
- 在 for 循环中断中的 JavaScript 切换;冲突
- 从外循环中断,同时循环通过内循环
- 从嵌套循环中断:SyntaxError:找不到标签
- 当遇到不存在的图像时,For循环中断