Как дождаться полного выполнения функции?
Добрый день!
Пользовался поиском, не нашел ответа. Если такая тема уже обсуждалась, прошу дать ссылочку. Ситуация такая: Есть две функции Funk1(); Funk2(); Они выполняются последовательно в одном обработчике. Но нужно чтобы Funk2() начала свое выполнение только тогда, когда Funk1 выполнится полностью. Подскажите плиз как это реализовать? Заранее всем мпасибо! |
Она и так выполняется после Func1.
|
Цитата:
При тестировании получается так, что Funk2() выполняется раньше чем Funk1(). |
Это уже не функция, а данные фрейма загружаются асинхронно. У фрейма есть событие onload, вот на него и вешайте Funk2.
|
Привожу кусок кода:
<script type="text/javascript"> var Result;//переменная результата function Funk(){// обработчик события нажатия кнопки Funk1(); return Result; } function Funk1(){ newframe=document.createElement("iframe"); document.body.insertBefore(newframe,document.getElementById("mydiv")); newframe.src="test_content.html"; newframe.onload=Funk2();//ждем загрузки фрейма и выполняем вторую функцию alert("Funk1"); } function Funk2(){ Result=document.frames[0].document.body.innerHTML;//берем содержимое фрейма newframe.parentNode.removeChild(newframe);//удаляем фрейм alert("Funk2"); } </script> <div id="mydiv"></div> <input type="button" value="Test" onclick="alert(Funk());"> Алерты добавлены для проверки Первая функция запускается первой, вторая - ворой. При этом алерт второй функции появляется раньше. Это значит что вторая функция не дожидается полного выполнения первой. Как сделать чтобы она дожидалась? |
Octane, я так и делаю, но всеравно результат не тот. Может я неправильно использую онлоад?
|
function fnc1(){alert (1)} function fnc2(){alert (2)} fnc1(); fnc2(); Где ты видишь, что функции выполняються асинхронно?! Копай в другом месте... |
Цитата:
alert(Funk2()); // получаем сообщение "undefined" то есть запись выше равносильна следующей: newframe.onload = undefined; функция выполняется сразу же и возвращает undefined, которым и инициализируется обработчик события. Нужно передавать ссылку на функцию: newframe.onload = Funk2; |
Да, тут провтыкал.
newframe.onload = Funk2; Но теперь обработчик кнопки заканчивает выполнение раньше чем вторая функция: сообщения в таком порядке: Funk1 Undefined Funk2 И только если нажать на кнопку еще раз, то : Funk1 Текст из фрейма Funk2 Может это из-за браузера? Тестил в Опере Мозилла и ИЕ вообще не выдают алерт 2й функции |
Цитата:
Почитайте про асинхронное программирование. var a = 1; function F() { a = 2; } setTimeout(F, 100); alert(a); // чему равно a? |
Часовой пояс GMT +3, время: 11:53. |