Просто определите функцию до истечения времени ожидания
for(var i=0; nextFunction = aList[i];i++) {
var waitAndDoSomething = function(func) {
return function() { func.doSomething(); }
};
setTimeout(waitAndDoSomething(nextFunction),500*i);
}
Другой возможный ответ
По предложению minitect я начал думать о других возможных решениях.Решение, которое мне кажется чистым, заключается в использовании bind
String.prototype.doSomething = function() { alert(this); } // Just for testing
var aList = ['one', 'two', 'three']; // Just for testing
for(var i=0;obj = aList[i];i++) {
setTimeout(obj.doSomething.bind(obj),500*i);
}
Однако я не уверен, насколько хорошо это будет работать в контексте вопроса Razor Storm, потому что я не знаю, что такое aList [я] представлял бы.
Отвечает ли это на вопрос
Мне также интересно, является ли это предполагаемым поведением.Это фактически не будет спать после выполнения, а скорее устанавливает время.Это может быть обманчиво, но если мы действительно хотим выполнить функцию, а затем поспать полсекунды, прежде чем следующая, у нас отсрочено время.Вместо этого я бы использовал рекурсию:
String.prototype.doSomething = function() { alert(this); }
var aList = ['one', 'two', 'three'];
var doNextSomething = function(index) {
if (!index) { index = 0 }
if (nextObject = aList[index]) {
nextObject.doSomething();
setTimeout(doNextSomething, 500, index + 1);
}
};
doNextSomething();
Теперь она будет ждать 500 миллисекунд после выполнения функции (очевидно, в длительном задании).
Я думаю, что опубликованные ответы былиболее того, о чем думал Razor Storm.