Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.05.2009, 13:58
Ajax
 
Сообщений: n/a

Как узнать, завершила ли свою работу рекурсивная функция
Здраствуйте у меня есть несколько рекурсивных функций которые вызывают сами себя, все они заканчивают свою работу по разному, какаято закончила а какаято еще вызывается, так вот нужно периодически узнавать, завершили ли все функции свою работу. У меня для этого сделан объект, при завершении работы функции, в соответствующее свойство объекта записывается 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);}
}

косяк в том что при каждой операции связанной с вызовом функций, массив теряет по одному элементу, куда непонятно, в других случая хон и вовсе равен нулю хотя функции работают, может ктото сталкивался с этим и есть более изящные решения...)?
Ответить с цитированием
  #2 (permalink)  
Старый 13.05.2009, 14:08
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Или вы не понимаете, что такое рекурсия, или еще что-нибудь, не буду телепатически предполагать что.
function func(i) {
    // Я рекурсивная функция, вот я рекурсивно вызываю сама себя
    // Пока я тут вызываю сама себя, никакие другие функции выполняться не могут.
    if (i > 0)
        func(i - 1);
    // А вот я выхожу из себя, т.е. заканчиваю свою работу
    return;
}

func(100);
alert('Функция завершила свою работу.');


telepat mode: Если вы используете setTimeout, то это не рекурсия.
Ответить с цитированием
  #3 (permalink)  
Старый 13.05.2009, 14:13
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

по поводу "проверять автоматически": лучше вызвать callback, когда завершилось выполнение функций

если неизвестен порядок "завершения функций", то можно создать переменную, в которую изначально записать количество функций, и при каждом "завершении" уменьшать этот счетчик, а когда он станет равным нулю - вызвать callback
Ответить с цитированием
  #4 (permalink)  
Старый 13.05.2009, 14:39
Ajax
 
Сообщений: n/a

те если функция вызывает саму себя через таймаут, то она не рекурсивная и таких функций может работать несколько одновременно..? просто в некоторый браузерах они выполняются по очереди
Ответить с цитированием
  #5 (permalink)  
Старый 13.05.2009, 14:50
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Цитата:
те если функция вызывает саму себя через таймаут, то она не рекурсивная
строго говоря - нет, не строго - не обязательно

Цитата:
таких функций может работать несколько одновременно
в пределах одного окна (фрейма) не может работать несколько функций одновременно - http://javascript.ru/tutorial/events/timing
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как узнать, что содержит onClick? PHPNoob Events/DOM/Window 3 17.07.2015 12:20
Как узнать размеры изображения в internet explorer dark Общие вопросы Javascript 1 13.04.2009 16:24
Как узнать value radio button-a из javascript kaaron Общие вопросы Javascript 1 17.02.2009 13:25
Как узнать о том, что флэш уже загрузился. Snipe Общие вопросы Javascript 4 29.01.2009 11:21
Как узнать какие ошибки произошли при парсинге xml файла faunder Events/DOM/Window 0 12.09.2008 14:17