for ( i = 0; i < 100; i++) {
browser.manage().logs().get('browser').then(function(browserLog) {
console.log(i);
});
}
我试图使用量角器来运行此程序,但是我在控制台中得到100倍100的打印。我有一些功能正在尝试使用循环来实现。我该如何在量角器中循环播放?
这是因为要传递给的函数then
都封闭了变量 i
,而不是创建函数时变量具有的值。所以后来,当函数被调用,他们都看到的价值i
,因为它是那么的循环完成(100)之后。
如果要i
在创建函数时捕获其原样的值,则可以使用ES5的Function#bind
:
for ( i = 0; i < 100; i++) {
browser.manage().logs().get('browser').then(function(index, browserLog) {
console.log(index);
}.bind(null, i));
}
bind
返回一个新函数,该函数在被调用时将使用给定this
值(在这种情况下,我正在使用null
)以及您在其后跟随的任何参数调用原始函数,然后再bind
返回给该函数的参数。
另一种方法是构建器功能:
for ( i = 0; i < 100; i++) {
browser.manage().logs().get('browser').then(buildHandler(i));
}
function buildHandler(index) {
return function(browserLog) {
console.log(index);
};
}
这具有允许调用者控制的优点this
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句