gpt4 book ai didi

javascript - While 循环导致异步问题

转载 作者:行者123 更新时间:2023-12-03 02:13:56 30 4
gpt4 key购买 nike

我有以下代码。我对 Protractor 和 JavaScript 比较陌生,所以如果这是一个愚蠢的问题,我深表歉意,但我做了很多研究,但没有运气。我想做的就是从下拉列表中选择一个选项,直到出现某个按钮。我的所有代码都有效,但是当我将其放入 while 循环中时,它不会执行任何操作。谁能解释为什么会发生这种情况?我知道这与它的异步方式有关,但我自己思考,无法弄清楚这一点。提前致谢。

 function selectProject(i){
var selectSecondProject = element(by.id('translation-brief--select-project')).all(by.tagName('option')).get(i);
selectSecondProject.click().then(function() {
browser.sleep(2000);
});
};

it('should select a different project from the drop down menu', function(){
var loop = true;
var i = 1;
while(loop == true){
selectProject(i).then(function(){
browser.sleep(2000);
});
element(by.id('brief-button')).isDisplayed().then(function (isVisible) {
if (isVisible) {
loop = false;
}
else{
i++;
}
});
}

最佳答案

sleep 函数是异步执行的,因此它并不是真正发生在循环的计时内。事实上,循环可能会永远持续下去,永远不会给 then 函数以及 sleep 执行的机会。

异步循环函数的方法是使用setIntervalsetTimeout重新启动循环。如果不清楚的话我可以更详细地讨论。

更新:

这是我建议的一个粗略想法(我还没有实际测试过这段代码,所以要小心。这只是一个粗略的想法!):

it('should select a different project from the drop down menu', function(){
var i = 1;
function myLoop () {
selectProject(i).then(function(){
browser.sleep(2000);
element(by.id('brief-button')).isDisplayed().then(function (isVisible) {
if (!isVisible) {
i++;
setTimeout(myLoop);
}
});
})
}

myLoop();
});

关于javascript - While 循环导致异步问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49440628/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com