节点function没有打破循环

我正在做一个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返回false睡眠1秒,然后再试一次。 如果它返回true然后继续。 就像我上面所说的那样,不pipe是真是假,只要循环都是循环的。 谢谢

Driver.sleep是asynchronous的。 睡眠呼叫期间循环正在继续。 一旦callback进入睡眠状态,循环已经完成。 一种解决scheme是使用recursion(注意,当您最初调用函数时,不需要为“i”提供值)。 (免责声明:未经testing的代码…但你明白了。)

 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; } }); } } 

这种方法的一个优点是它是非阻塞的。