2016-05-07 143 views
0

代码1如何处理findElements结果?

resultsBoard.findElements(By.css(mySelector)).then(function(elements) { 
    elements.forEach(function(val, idx) { 
    elements[idx].getText().then(function(text) { 
     console.log(text); 
    }); 
    }); 
}); 

代码2

resultsBoard.findElements(By.css('mySelector')).then(function(elements) { 
    for (var idx = 0; idx < elements.length; idx++) { 
    elements[idx].getText().then(printText(text)); 
    } 
}); 

代码1个运作良好,并检索所有匹配我的选择元素的文本。 代码2给了我一个

ReferenceError: text is not defined

的区别是什么?为什么会发生?

回答

2

第二个片段增加了调用括号,立即调用函数(printText),预期text已被定义。这些括号不存在于第一个片段中。

elements[idx].getText().then(printText(text)); 

// is equivalent to... 

var _result = printText(text); 
elements[idx].getText().then(_result); 

为了提供一个名为函数作为参数,你只想使用其名称作为变量:

elements[idx].getText().then(printText); 
+0

现在是十分清楚的。我的JSHint Gutter告诉我在外面创建一个函数,并且我忽略了printText函数。我期待着差异来自forEach。谢谢 –

1

在第一个例子:

elements[idx].getText().then(function(text) { 
    console.log(text); 
}); 

.then(function(text))部分实际上是给你从getText()得到的数据给出一个名字(文本),所以你可以在下一行使用它。第二个例子中你没有这样做。

所以,你应该你的第二个例子改写为这样的事情来得到它的工作:

resultsBoard.findElements(By.css('mySelector')).then(function(elements) { 
    for (var idx = 0; idx < elements.length; idx++) { 
    elements[idx].getText().then(function(text) { 
     printText(text); 
    }); 
    } 
});