javascript - 如何在量角器中使用变量值
问题描述
我正在“Then”函数中进行一些计算,而我无法将计算的输出超出“Then”范围。我在下面给出了我被卡住的示例代码。
var flag= true;
for(let i=1; i<leng, i++){
if(flag){
element(by.xpath("dsds")).click();
--some delete fucntionality
element(by.xpath("abc")).all(tagName('li').count().then(function(listLength)
{
if(listlength>1)
{
"doing some calculation
flag=false;
}
});
}}
我的问题:在上面的代码中,标志值更改为 false,这应该限制第 2 次迭代中的第一个 IF 块执行。没有发生...因为标志值保留在 THEN 函数内和 THEN 函数外部,所以标志值始终为真。
如何解决这个问题。请有人指导我。
解决方案
您的问题与变量的范围无关,与异步 JavaScript无关。flag
这是一个简化的表示,以帮助理解正在发生的事情:
var flag = false;
for (var i = 0; i < 100; i++) {
if(flag){
console.log('Flag has been set!');
break;
} else {
console.log('Flag not set yet :(');
if(i === 3){
flag = true;
}
setTimeout(function(){ console.log('Async callback finally happened! '); }, 1000);
}
}
与setTimeout()
函数一样,您的element(by.xpath("abc")).all(tagName('li').count().then(..)
函数调用也是异步的。唯一的区别是setTimeout()
等待回调,而您的函数正在等待承诺的解决。
注意:flag
变量是如何设置为 true 的,并且循环在回调被触发for
之前很久就中断了。setTimeout()
这表明变量的范围不是问题。您的代码中可能发生的情况是您的循环在您的承诺第一次解决之前完成。flag
for
附加要点注意setTimeout()
每次for
循环迭代时都会调用的控制台输出。您的代码也会出现同样的结果。您将调用element(by.xpath("abc")).all(tagName('li').count().then(..)
for 循环的每一次迭代,这显然是不可取的或高性能的。此外,您应该坚持使用var
OR let
&const
如果您选择后者,它将帮助您防止潜在的范围问题。
推荐阅读
- r - 从 R 导出 excel,默认情况下将数字存储为数字
- android - 领域。如何将新实体添加到数据库?
- python - pyspark - 'DataFrame' 对象没有属性 'map'
- benchmarking - 使用 Quarkus 进行 Optaplanner 基准测试
- android - Android Studio 编辑器颤振行为
- java - 如何获取java程序使用的最大内存
- azure-spatial-anchors - ASA 2.9.0 软件包的入门教程
- react-native - 有没有办法提取屏幕上像素的颜色信息?- 反应原生
- python - 使用 Gekko 的速率系数和初始浓度估计 - 关于模型结构的建议
- javascript - 如何在工厂函数中使用自定义对象类型编写 JSDOC 参数