Лучший подход к этому - использовать тот факт, что функции являются объектами первого порядка в JavaScript. Поэтому вы можете назначать их переменным и вызывать их через переменную, изменяя функцию, на которую ссылается переменная, по мере необходимости.
Например:
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;
Если оба ваших кода сейчас используют переменную для вызова функции:
callback();
затем, в зависимости от того, что выполняется первым, вызывается firstCallback, который изменяет переменную так, чтобы она указывала на secondCallback, и, таким образом, будет вызываться в зависимости от того, кто выполняет вторую.
Однако ваша формулировка вопроса подразумевает, что все это может быть ненужным, так как кажется, что вы делаете запрос Ajax и затем продолжаете обработку. Поскольку интерпретаторы JavaScript являются однопоточными, обратный вызов Ajax никогда не будет выполняться до тех пор, пока основная часть кода, сделавшего запрос, не будет завершена в любом случае, даже если это происходит долго после получения ответа.
Если это не ваша ситуация, я создал рабочий пример на своем сайте ; просмотрите исходный код, чтобы увидеть код (непосредственно перед тегом ). Он делает запрос, который задерживается сервером на пару секунд, затем запрос, который получает немедленный ответ. Ответ на второй запрос обрабатывается одной функцией, а ответ на первый запрос позднее обрабатывается другой функцией, поскольку запрос, который первым получил ответ, изменил переменную обратного вызова для ссылки на вторую функцию.