Думаю уже можно советовать использовать 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();