gpt4 book ai didi

javascript - 如何使用闭包在循环中使用 then()

转载 作者:行者123 更新时间:2023-11-30 07:59:11 25 4
gpt4 key购买 nike

这个问题与 Using protractor with loops 中提出的问题非常接近但如果有微小的差异,我仍然没有解决。

// This script should print button names and its current numbers
var buttons = element.all(by.css('button'));
buttons.count().then(function(cnt){
for(var i=0;i<cnt;i++) {
var func = function(i2){ var k=i2; return function(){console.log("#"+k+", name: "+button_name);}}(i);
buttons.get(i).getText().then(func);
}
});

编译器说“ReferenceError: button_name is not defined”是对的。如何在 then() 函数中传递按钮名称?

最佳答案

您正在获取函数名称作为您的 then 回调的参数 - 但目前您的 func 没有参数。如果你给它一个,它就会起作用:

for (var i=0; i<cnt; i++) {
var func = function(k) {
return function(button_name) {
// ^^^^^^^^^^^
console.log("#"+k+", name: "+button_name);
};
}(i);
buttons.get(i).getText().then(func);
}

或者可能没有从 IEFE 返回,更常见的模式可能是:

for (var i=0; i<cnt; i++) (function(k) {
buttons.get(k).getText().then(function(button_name) {
// ^^^^^^^^^^^
console.log("#"+k+", name: "+button_name);
});
}(i));

免责声明:我并不是说这是使用 protactor 的最佳方式,这只是 promise 和闭包的工作方式。我希望 Protractor 实际上提供一种迭代方法 - @finspin 似乎已经使用过它。

关于javascript - 如何使用闭包在循环中使用 then(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32380165/

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