(Ignorando WebWorkers) JavaScript se ejecuta en un único hilo, por lo que puede estar seguro de que el código2 siempre se ejecutará después del código1.
A menos su Code1 hace algo asíncrona como una llamada Ajax o una setTimeout()
, en cuyo caso se completará el controlador de clic disparada, entonces Código2 ejecutará, a continuación, (finalmente) la devolución de llamada de la llamada Ajax (o setTimeout()
, o lo que sea) se ejecutará.
EDIT: Por su pregunta actualizada, Código2 siempre se ejecutará antes de Code1, ya que como he dicho anteriormente una devolución de llamada asincrónica Ajax ocurrirá más tarde (incluso si la respuesta Ajax es muy rápido, no va a llamar a la devolución de llamada hasta el JS actual termina).
"Cómo me aseguro de que Código2 ejecuta después Code1 ejecuta"
usando .click()
sin params es un acceso directo a .trigger("click")
, pero si en realidad se llama .trigger()
explícitamente le puede proporcionar parámetros adicionales que se pasa al controlador, lo que le permite hacer esto:
$(".elem").click(function(e, callback) {
$.post("page.php".function(){
//code1
if (typeof callback === "function")
callback();
});
});
$(".elem").trigger("click", function() {
// code 2 here
});
es decir, dentro de la prueba de controlador click si se ha pasado una función en el parámetro callback
y, si es así, llámelo. Esto significa que cuando el evento ocurre "naturalmente" no habrá devolución de llamada, pero cuando lo desencadena programáticamente y pasa una función, entonces esa función se ejecutará. (Tenga en cuenta que el parámetro que pase con .trigger()
no tiene que ser una función, puede ser cualquier tipo de datos y puede pasar más de un parámetro, pero para ello queremos una función. Consulte el .trigger()
doco para obtener más información.)
demostración: http://jsfiddle.net/nnnnnn/ZbRJ7/1/
Defina lo que quiere decir con "código 1 se ejecuta". Tu código tiene un método ajax. Entonces, ¿quieres decir cuándo se ejecuta la llamada ajax o se ejecuta también ajax? – Rahatur