Ответ 1
(Игнорирование WebWorkers) JavaScript работает в одном потоке, поэтому вы можете быть уверены, что code2 будет всегда выполняться после кода1.
Если ваш код1 не делает что-то асинхронное, как Ajax-вызов или setTimeout()
, и в этом случае завершится обработчик запуска, тогда будет выполняться код2, затем (в конечном итоге) обратный вызов из вызова Ajax (или setTimeout()
, или что-то еще).
EDIT:. Для вашего обновленного вопроса код2 всегда будет выполняться перед кодом1, потому что, как я уже сказал выше, обратный вызов async Ajax произойдет позже (даже если ответ Ajax очень быстрый, он не будет вызовите обратный вызов, пока не закончится текущий JS).
"Как я убеждаюсь, что code2 выполняется после выполнения кода1"
Использование .click()
без параметров - это ярлык для .trigger("click")
, но если вы действительно вызываете .trigger()
явно, вы можете предоставить дополнительные параметры, которые будут переданы обработчику, что позволяет это сделать:
$(".elem").click(function(e, callback) {
$.post("page.php".function(){
//code1
if (typeof callback === "function")
callback();
});
});
$(".elem").trigger("click", function() {
// code 2 here
});
То есть, внутри обработчика кликов проверяет, была ли функция передана в параметре callback
, и если это так. Это означает, что когда событие происходит "естественно", никакого обратного вызова не будет, но когда вы программно его запускаете и передаете функцию, эта функция будет выполнена. (Обратите внимание, что параметр, который вы передаете с помощью .trigger()
, не должен быть функцией, это может быть любой тип данных, и вы можете передать более одного параметра, но для этого нам нужна функция. См. .trigger()
doco для получения дополнительной информации.)