For / While循环与异步调用斗争

时间:2015-05-18 15:34:45

标签: protractor

我正在尝试按常规间隔检查元素,并仅在存在时单击。有时候这个元素会在2-3分钟内出现。如果它不存在,我想等几秒钟,然后刷新页面

这是我试过的:

for(var i = 1; i < 60; i++){
    element(that.proposalByOrderPath(num)).isPresent().then(function(result){
        if(result){
            console.log(i);
            return element(that.proposalByOrderPath(num)).click();
        }
        else{
            browser.sleep(15000);
            browser.refresh();
       }
    });
}

作为输出,它打印60次。它单击该元素一次,但尝试再次查找该元素并抛出“元素不可见”错误。

2 个答案:

答案 0 :(得分:0)

这是一个关闭问题。如需更多理解,请阅读以下内容 -

How do JavaScript closures work?

http://www.w3schools.com/js/js_function_closures.asp

答案 1 :(得分:0)

我们可以通过以下3种方式中的任何一种来解决for循环中的异步调用:

  1. 回调

    var a = function(callback){ //代码
    打回来(); }

    var b = function(){ for(循环细节){ that.a(函数(){ }) } }

  2. 通过递归调用函数而不是使用for循环

  3. 通过自我迭代

    for(循环细节){ (功能(I){ //你的代码 })(一世); }