$timeout внутри цикла will создает бесконечный цикл
Я не могу заставить тайм-аут и цикл работать вместе. Если я удаляю цикл, он работает или если я удаляю тайм-аут, он будет работать. Вместе я получу бесконечный цикл, и не похоже, что функция timeout когда-либо работает, если она находится внутри цикла while.
Любая помощь будет оценена!
function doTask (list) {
if (list) {
while (list.length > 0) {
(function(list){
$timeout(function() {
list.splice(0, 1);
console.log("timeout...")
}, 5000);
})(list);
}
}
}
2 ответа:
Вы должны использовать рекурсию для цикла. Кроме того, вы должны проверить
list.length
, поскольку[]
является истинным значением.
function doTask(list) { if (list.length) { setTimeout(function() { list.splice(0, 1); console.log("timeout...") doTask(list); }, 500); } } var list = [1,2,3,4,5] doTask(list);
Ваш код никогда не дает возможности запустить функцию timeout.
При вызове doTask он переходит в стек для запуска. Теперь в каждой итерации цикла вы регистрируете тайм-аут, который будет выполнен, когда эта задача doTask завершится. Но вы никогда не давали шанса на тайм-аут, поэтому длина списка никогда не уменьшалась, поэтому он работает вечно.
Надеюсь, это прояснит ваш запрос.