Как дождаться полного выполнения функции?
Добрый день!
Пользовался поиском, не нашел ответа. Если такая тема уже обсуждалась, прошу дать ссылочку. Ситуация такая: Есть две функции 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?
|
Даже при setTimeout(F, 0), a останется 1...
|
Цитата:
<input type="button" onclick="alert(Funk())"> |
Цитата:
|
Спасибо всем!
Octane и B~Vladi плюсики) Буду искать другие решения проблемы |
| Часовой пояс GMT +3, время: 07:46. |