Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.04.2014, 16:02
Новичок на форуме
Отправить личное сообщение для XRASER Посмотреть профиль Найти все сообщения от XRASER
 
Регистрация: 10.04.2014
Сообщений: 6

Дождаться завершения функции и продолжить выполнение кода
В моем коде выполняется функция, но необходимо ее дождаться, только после этого продолжить выполнение кода, как это сделать?

Для примера написал такой простенький код, чтобы было легче с ним работать:
function func()
{
    setTimeout('n=1', 2000); // Задержка 2 секунды, для примера.
}

var n = 0;
alert ("Начали");
func();
alert("Закончили. Результат = " + n + ".");

Добавить bool переменные и чекать их - долго и нудно.
Добавлять setTimeout больше чем 2 секунды на вывод ответа - бессмысленно.
Ответить с цитированием
  #2 (permalink)  
Старый 10.04.2014, 16:15
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,589

обрамить весь оставшийся код в функцию , и вызывать её в конце вызываемой в асинхроне функции . Соответственно
'n=1'
перенести в функцию и в таймере вызывать её.
А ну и ещё - 'n=1' === eval( 'n=1') по дефолту

Сообщение от XRASER
Добавить bool переменные и чекать их - долго и нудно.
- ты в меньшенстве кто так считает. Всему своё место, и не диктуется такими понятиями, как долго, нудно. Архитектурой диктуется и целями

Последний раз редактировалось dmitriymar, 10.04.2014 в 16:26.
Ответить с цитированием
  #3 (permalink)  
Старый 10.04.2014, 16:32
Новичок на форуме
Отправить личное сообщение для XRASER Посмотреть профиль Найти все сообщения от XRASER
 
Регистрация: 10.04.2014
Сообщений: 6

function func()
{
    setTimeout('n=1', 2000); // Задержка 2 секунды, для примера.
    func2();
}

function func2()
{
    alert("Закончили. Результат = " + n + ".");
}

var n = 0;
alert ("Начали");
func();


Ничего не изменилось. А можно ли сделать так, чтобы код всегда выполнялся синхронно?
Ответить с цитированием
  #4 (permalink)  
Старый 10.04.2014, 16:35
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Думаю уже можно советовать использовать Promise, нативная поддержка есть в Firefox и Chrome
new Promise(function (resolve) {

	alert("Начали");

	setTimeout(function () {

		resolve(1);

	}, 1000)

}).then(function (value) {

	alert("Закончили. Результат = " + value + ".");

});
для старых браузеров и IE можно подключить полифил https://github.com/jakearchibald/es6-promise

Либо делай, как сказал dmitriymar: «обрамить весь оставшийся код в функцию, и вызывать её в конце вызываемой в асинхроне функции»
var n = 0;

function func() {
	setTimeout(function () {
		n = 1;
		callback();
	}, 2000); // Задержка 2 секунды, для примера.
}

function callback() {
	alert("Закончили. Результат = " + n + ".");
}

alert("Начали");
func();
Ответить с цитированием
  #5 (permalink)  
Старый 10.04.2014, 16:39
Новичок на форуме
Отправить личное сообщение для XRASER Посмотреть профиль Найти все сообщения от XRASER
 
Регистрация: 10.04.2014
Сообщений: 6

Сообщение от Octane Посмотреть сообщение
Думаю уже можно советовать использовать Promise, нативная поддержка есть в Firefox и Chrome
new Promise(function (resolve) {

	alert("Начали");

	setTimeout(function () {

		resolve(1);

	}, 1000)

}).then(function (value) {

	alert("Закончили. Результат = " + value + ".");

});
для старых браузеров и IE можно подключить полифил https://github.com/jakearchibald/es6-promise

Либо делай, как сказал dmitriymar: «обрамить весь оставшийся код в функцию, и вызывать её в конце вызываемой в асинхроне функции»
var n = 0;

function func() {
	setTimeout(function () {
		n = 1;
		callback();
	}, 2000); // Задержка 2 секунды, для примера.
}

function callback() {
	alert("Закончили. Результат = " + n + ".");
}

alert("Начали");
func();
Спасибо большое, второй пример понятен, буду использовать его.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
onclick прервать выполнение функции wgt Events/DOM/Window 4 30.04.2013 20:52
Функции для упрощения написания кода Bebarr Swallow Общие вопросы Javascript 2 28.01.2013 02:08
При выполнение строки кода вылетаю из функции. developer_ Events/DOM/Window 3 28.07.2011 00:45
Дождаться выполнение запроса. psyhonut jQuery 6 12.09.2010 12:25
Последовательное выполнение кода avtor01 AJAX и COMET 6 29.10.2008 19:06