Tal como está el código que has puesto, ocurre como esperas. El código se ejecuta secuencialmente. Hasta que no termine precallback() no se ejecuta la siguiente sentencia.
Código javascript
:
Ver originalvar flag = 0;
function mifuncion(param,hook){
alert("[1]: " + flag);
flag = param;
alert("[2]: " + flag);
if (hook) { hook(); }
alert("[3]: " + flag);
flag = param;
alert("[4]: " + flag);
}
mifuncion(3, function() { alert("[a]: " + flag); flag = 7; alert("[b]: " + flag);});
El resultado de los alerts es:
[1]: 0
[2]: 3
[a]: 3
[b]: 7
[3]: 7
[4]: 3
Es decir, en el orden correcto que cabía esperar.
De todos modos, con la llamada de ejemplo que has puesto, no hay ningún efecto secundario en las funciones que pasas como precallback y postcallback, así que en realidad no se ve el orden de ningún modo. Repito: con ese ejemplo.
Otra cosa distinta es que en las funciones que pasas como precallback y postcallback haya otro tipo de llamadas. Si, lo que tienes en ellas, por ejemplo son
llamadas asíncronas con XHR o
setTimeouts o algo similar, entonces
a eso no se esperará que finalice
(por definición). Pero ojo, a
eso. Porque en realidad la llamada a precallback() sí que finalizará y se continuará en orden.
Quizá sería más conveniente que pusieras el código real para que podamos ver dónde está el problema.