El mejor enfoque para esto es tomar ventaja del hecho de que las funciones son objetos de primer orden en JavaScript. Por lo tanto, puede asignarlos a variables e invocarlos a través de la variable, cambiando la función a la que hace referencia la variable según sea necesario.
Por ejemplo:
function firstCallback() {
// the first thing has happened
// so when the next thing happens, we want to do stuff
callback = secondCallback;
}
function secondCallback() {
// do stuff now both things have happened
}
var callback = firstCallback;
Si los dos trozos de código utilizan ahora la variable de llamar a la función:
callback();
entonces lo que uno ejecuta primero llamará al firstCallback, que cambia la variable para apuntar a secondCallback, y así será invocado por el que ejecute el segundo.
Sin embargo, su fraseo de la pregunta implica que todo esto puede ser innecesario, ya que parece que está haciendo una solicitud de Ajax y luego continúa procesando. Como los intérpretes de JavaScript son de subproceso único, la devolución de llamada de Ajax nunca se ejecutará hasta que el cuerpo principal del código que realizó la solicitud haya terminado de ejecutarse de todos modos, incluso si eso es mucho después de que se haya recibido la respuesta.
En caso de que no sea su situación, he creado un working example on my site; ver la fuente para ver el código (justo antes de la etiqueta </body >). Hace una solicitud que el servidor demora por unos segundos, luego una solicitud que recibe una respuesta inmediata. La segunda respuesta de solicitud es manejada por una función, y la respuesta de la primera solicitud es manejada posteriormente por una función diferente, ya que la solicitud que recibió una respuesta primero ha cambiado la variable de devolución de llamada para referirse a la segunda función.
Dado que no hay una verdadera multi-threading en JS (aún) esto también es seguro hacerlo. – Jabe
El problema aquí es que uno de los "hilos" no está realmente terminado cuando llama a la función de devolución de llamada() desde su contexto. – Thevs
Thevs: Es exactamente por eso que hay un contador, por lo que solo continúa la ejecución una vez que ambos "hilos" han terminado. Tenga en cuenta que esta no es una respuesta completa, y a propósito; Estoy asumiendo cierta inteligencia por parte del solicitante, de modo que puedan llenar los vacíos que crean necesarios. Solo intento proporcionar la idea básica de cómo resolver este problema. –