for ( i = 0; i < 100; i++) {
browser.manage().logs().get('browser').then(function(browserLog) {
console.log(i);
});
}
我正在尝试使用量角器来运行它,但我在控制台中打印了100次。我有一些功能正在尝试使用循环来实现。如何在量角器中进行循环?
答案 0 :(得分:2)
这是因为您传递给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
。