Функции обратного вызова в API Javascript / Google Hangouts

1

Таким образом, я возился с google-анимитами, и есть функция addStateChangeListener (callback), которая позволяет вам зарегистрировать функцию обратного вызова, которая будет вызываться всякий раз, когда изменяется состояние приложения.

Например, функция обратного вызова, которая может быть зарегистрирована,

function onStateChanged(add, remove, state, metadata) {
  state_ = state;
  metadata_ = metadata;

  if (<some boolean>) {
    doFunction(); //this function alters the state
  }

  //more stuff below
}

Мой вопрос: если doFunction() сделал что-то, что изменило состояние (и вызвало addStateChangeListener), будет ли onStateChange снова вызываться перед остальной функцией после выполнения if-операции? Или первая итерация onStateChange() будет выполняться сначала, а затем onStateChange снова будет вызвана. Или это может просто полностью игнорировать остальную часть первой функции onStateChange и просто вызвать onStateChange, когда doFunction изменяет состояние?

Спасибо за вашу помощь.

Теги:
callback
function

1 ответ

1
Лучший ответ

Глядя на ссылку API Hangouts Google, похоже, что она снова запустит функцию обратного вызова, если вы измените состояние. В частности:

обратный вызов будет вызван для изменений в общем состоянии, которые возникают в результате вызовов submitDelta, сделанных из приложения локального участника.

Это, безусловно, не будет игнорировать остальную часть первой функции обратного вызова, и это, вероятно, (хотя, возможно, это не так, если он проверяет с сервером через вызов Ajax, что состояние фактически изменилось) также запускает второй сразу, без ожидая завершения первой функции обратного вызова. Если вы хотите, чтобы первая функция всегда выполнялась до вызова второй, вы всегда можете задержать свой вызов, чтобы изменить состояние с помощью window.setTimeout() вокруг вызова doFunction(). Задать задержку в 1 миллисекунду будет достаточно.

  • 0
    Я чувствую, что использование sleep / setTimeout может быть не самой лучшей практикой программирования. Возможно, он ожидает ненужного количества времени, и нет гарантии, что он будет ждать достаточно долго для всех случаев (крайние случаи). Я ошибаюсь, думая об этом? Я не слишком уверен, и если нет, то нет ли лучшего способа гарантировать, что вторая функция вызывается сразу после первой?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню