Дождаться завершения функции и продолжить выполнение кода
В моем коде выполняется функция, но необходимо ее дождаться, только после этого продолжить выполнение кода, как это сделать?
Для примера написал такой простенький код, чтобы было легче с ним работать:
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, время: 00:05. |