2016-05-07 9 views
0

-Code 1Wie behandelt man findElements Ergebnis?

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

-Code 2

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

Code 1 funktioniert gut und ruft den Text aller Elemente, die meine Wähler abgestimmt. Code 2 gibt mir ein

ReferenceError: text is not defined

Was ist der Unterschied? Warum passiert das?

Antwort

2

Das zweite Snippet fügt aufrufende Klammern hinzu, die die Funktion (printText) sofort aufrufen und erwarten, dass text bereits definiert ist. Diese Klammern sind im ersten Snippet nicht vorhanden.

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

// is equivalent to... 

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

Um eine benannte Funktion als Argument liefern, sollten Sie nur als eine Variable seinen Namen verwenden:

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

Es ist nun vollkommen klar ist. Mein JSHint Gutter sagte mir, ich solle draußen eine Funktion erstellen, und ich ignorierte diese printText-Funktion. Ich habe erwartet, dass der Unterschied von der ForEach kommt. Vielen Dank –

1

Im ersten Beispiel:

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

Die .then(function(text)) Teil gibt den Daten, die Sie von getText() erhalten, einen Namen (Text), damit Sie ihn in der nächsten Zeile verwenden können. Sie tun dies nicht im zweiten Beispiel.

So sollten Sie Ihr zweites Beispiel zu so etwas wie dies umschreiben, um es an die Arbeit:

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