Как узнать, завершила ли свою работу рекурсивная функция
Здраствуйте у меня есть несколько рекурсивных функций которые вызывают сами себя, все они заканчивают свою работу по разному, какаято закончила а какаято еще вызывается, так вот нужно периодически узнавать, завершили ли все функции свою работу. У меня для этого сделан объект, при завершении работы функции, в соответствующее свойство объекта записывается false а когда он работает это свойство принимает true, и периодически проверяю есть ли в объекте свойства с true, если нет то соответственно работа функций прекратилась и можно ехать дальше...
function isCompleteResize() { for(var prop in isResize) { if(isResize[prop]) isResizeArr.push('1'); } if(isResizeArr.length == 0) {работа функций прекратилась, совершаем дальнейшие действия} else {isResizeArr.length = 0; setTimeout(isCompleteResize,100);} } косяк в том что при каждой операции связанной с вызовом функций, массив теряет по одному элементу, куда непонятно, в других случая хон и вовсе равен нулю хотя функции работают, может ктото сталкивался с этим и есть более изящные решения...)? |
Или вы не понимаете, что такое рекурсия, или еще что-нибудь, не буду телепатически предполагать что.
function func(i) { // Я рекурсивная функция, вот я рекурсивно вызываю сама себя // Пока я тут вызываю сама себя, никакие другие функции выполняться не могут. if (i > 0) func(i - 1); // А вот я выхожу из себя, т.е. заканчиваю свою работу return; } func(100); alert('Функция завершила свою работу.'); telepat mode: Если вы используете setTimeout, то это не рекурсия. |
по поводу "проверять автоматически": лучше вызвать callback, когда завершилось выполнение функций
если неизвестен порядок "завершения функций", то можно создать переменную, в которую изначально записать количество функций, и при каждом "завершении" уменьшать этот счетчик, а когда он станет равным нулю - вызвать callback |
те если функция вызывает саму себя через таймаут, то она не рекурсивная и таких функций может работать несколько одновременно..? просто в некоторый браузерах они выполняются по очереди
|
Цитата:
Цитата:
|
Часовой пояс GMT +3, время: 12:16. |