Can't Manage To Sleep Inside A Loop
Solution 1:
This function works more like a normal for loop while it isn't
You need to take into account that a for gets 3 arguments inbetween semicolons.
- Before starting (ie
var i=0
you define a variable) - A condition before running the code again (ie
i < 10
while i is under 10) - An action everytime it finishes the code again (
i++
add one to i)
Code
(function() {
// Define a variablevar i = 0,
action = function() {
// Condition to run againif (i < 10) {
document.write(i + "<br>");
// Add one to i
i++;
setTimeout(action, 1000);
}
};
setTimeout(action, 1000);
})();
Here is a jsfiddle for this code demonstrating its working: http://jsfiddle.net/sg3s/n9BNQ/
Solution 2:
You pass the return value of a function call to setTimeout
instead of a function. Try the following code:
for (var i = 0; i < 10; i++) {
(function(i) {
setTimeout(function() {
writeMsg(i);
}, 1000*i);
})(i);
}
In case you wonder why the call is wrapped inside an anonymous function: Without that function each setTimeout callback would receive the same i
so when the callbacks fire it would always be 10
. The anonymous function creates a new i
inside that is not connected to the loop variable.
Solution 3:
Classic function-in-a-loop problem. One archetypal solution:
functioncreateCallback(i) {
returnfunction () {
writeMsg(i);
};
}
functionwriteMsg (index) {
document.write (index + "<br>");
}
for (var i=0 ; i < 10 ; i++) {
setTimeout (createCallback(i), 1000*i);
}
Solution 4:
The 10 timeouts are all based on the time that setTimeout() is called. So, they are all triggered at the same time.
for (var i=0; i < 10; i++) {
(function(idx){
setTimeout(function(){
document.write(idx+"<br/>");
},1000*idx);
})(i);
};
Solution 5:
try this it will definitely help who all are think how to make it work wait property inside For Loop... try this code in this URL http://www.shopjustice.com/the-collections/C-10329.
var var2;
var tmp;
var evt;
var i=0;
var res = document.getElementsByClassName('mar-plp-filter-content nav nav--stacked')[0].children.length;
tmp = document.getElementsByClassName('mar-plp-filter-content nav nav--stacked')[0].children;
functionmyfunc()
{
if(i<res)
{
var2 = tmp[i].getElementsByTagName("span")[0].getElementsByClassName("inverted")[0];
// alert(var2.innerHTML);var evObj = document.createEvent('MouseEvents');
evObj.initEvent( 'mouseover', true, false );
var2.dispatchEvent(evObj);
var2.style.backgroundColor="GREEN";
i++;
setTimeout(myfunc,3000);
}
};
setTimeout(myfunc,3000);
Post a Comment for "Can't Manage To Sleep Inside A Loop"