लूप इंडेक्स (i
) लूप इंडेक्स (i
) एक लूप के भीतर प्रोटैक्टर का उपयोग करते समय मैं अपेक्षा करता हूं कि मैं अपेक्षा कर रहा हूं।लूप
लक्षण:
विफल: सूचकांक बाध्य से बाहर। सूचकांक में तत्व का उपयोग करने की कोशिश कर रहा है: 'एक्स', लेकिन केवल 'एक्स' तत्वों देखते हैं
या
सूचकांक स्थिर और हमेशा अंतिम मान
के बराबर है मेरे कोड
for (var i = 0; i < MAX; ++i) {
getPromise().then(function() {
someArray[i] // 'i' always takes the value of 'MAX'
})
}
उदाहरण के लिए:
var expected = ['expect1', 'expect2', 'expect3'];
var els = element.all(by.css('selector'));
for (var i = 0; i < expected.length; ++i) {
els.get(i).getText().then(function(text) {
expect(text).toEqual(expected[i]); // Error: `i` is always 3.
})
}
या
var els = element.all(by.css('selector'));
for (var i = 0; i < 3; ++i) {
els.get(i).getText().then(function(text) {
if (text === 'should click') {
els.get(i).click(); // fails with "Failed: Index out of bound. Trying to access element at index:3, but there are only 3 elements"
}
})
}
या
var els = element.all(by.css('selector'));
els.then(function(rawelements) {
for (var i = 0; i < rawelements.length; ++i) {
rawelements[i].getText().then(function(text) {
if (text === 'should click') {
rawelements[i].click(); // fails with "Failed: Index out of bound. Trying to access element at index:'rawelements.length', but there are only 'rawelements.length' elements"
}
})
}
})
प्रयास के लिए धन्यवाद - लेकिन यह क्लासिक क्लोजर-लूप समस्या है। –
@ बेंजामिनग्रेनबाम हां यह क्लासिक क्लोजर-लूप समस्या है, और मैं जवाब में http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example संदर्भित करता हूं। हालांकि, मैंने इसे दो कारणों से खोला। 1) बहुत से लोगों को दोनों के बीच सहसंबंध का एहसास नहीं होता है क्योंकि कुछ लोग 'तत्व को समझ नहीं पाते हैं। विश्वासियों ने वादे वापस कर दिया है और 2) क्लोजर प्रोटैक्टर के लिए सबसे अच्छा समाधान नहीं है क्योंकि इसके लिए प्रोटैक्टर-विशिष्ट समाधान हैं - उत्तर देखें – hankduan
रहस्य है मुझे मार रहा है! क्या दो कारण हैं? –