Дождаться завершения функции и продолжить выполнение кода
В моем коде выполняется функция, но необходимо ее дождаться, только после этого продолжить выполнение кода, как это сделать?
Для примера написал такой простенький код, чтобы было легче с ним работать: function func() { setTimeout('n=1', 2000); // Задержка 2 секунды, для примера. } var n = 0; alert ("Начали"); func(); alert("Закончили. Результат = " + n + "."); Добавить bool переменные и чекать их - долго и нудно. Добавлять setTimeout больше чем 2 секунды на вывод ответа - бессмысленно. |
обрамить весь оставшийся код в функцию , и вызывать её в конце вызываемой в асинхроне функции . Соответственно
'n=1'перенести в функцию и в таймере вызывать её. А ну и ещё - 'n=1' === eval( 'n=1') по дефолту Цитата:
|
function func() { setTimeout('n=1', 2000); // Задержка 2 секунды, для примера. func2(); } function func2() { alert("Закончили. Результат = " + n + "."); } var n = 0; alert ("Начали"); func(); Ничего не изменилось. А можно ли сделать так, чтобы код всегда выполнялся синхронно? |
Думаю уже можно советовать использовать 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(); |
Цитата:
|
Часовой пояс GMT +3, время: 15:08. |