【问题标题】:Callback functions in javascript/google hangouts apijavascript/google hangouts api中的回调函数
【发布时间】:2011-10-18 21:25:34
【问题描述】:

所以我在搞乱 google 的 hangouts api 并且有一个函数叫做 addStateChangeListener( 打回来 ) 它允许您注册一个回调函数,该回调函数将在应用程序状态更改时调用。

可以注册的示例回调函数是

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

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

  //more stuff below
}

我的问题是:如果 doFunction() 做了一些改变状态的事情(并触发了 addStateChangeListener),在 if 语句运行之后的其余函数之前是否会再次调用 onStateChange? 或者 onStateChange() 的第一次迭代会先运行到完成,然后再调用 onStateChange。 或者它可能只是完全忽略第一个 onStateChange 函数的其余部分,并在 doFunction 更改状态时调用 onStateChange?

感谢您的帮助。

【问题讨论】:

    标签: javascript api function callback


    【解决方案1】:

    查看Google Hangouts API reference,如果您更改状态,它似乎会再次运行回调函数。具体来说:

    回调将被调用以改变共享状态 来自本地参与者应用程序的 submitDelta 调用的结果。

    它绝对不会忽略第一个回调函数的其余部分,并且它可能(尽管它可能不会,例如,如果它通过 Ajax 调用与服务器检查状态实际上已经改变)也运行第二个立即,无需等待第一个回调函数完成。如果你想确保第一个函数总是在第二个函数被调用之前完成,你可以在调用doFunction() 前后用window.setTimeout() 延迟你的调用来改变状态。指定 1 毫秒的延迟就足够了。

    【讨论】:

    • 我觉得使用 sleep/setTimeout 可能不是最好的编程实践。它可能会等待不必要的时间,并且不能保证它对于所有情况(边缘情况)都等待足够长的时间。我这样想错了吗?我不太确定,如果不是,有没有更好的方法来保证第二个函数在第一个函数之后立即被调用?
    猜你喜欢
    • 1970-01-01
    • 2017-12-28
    • 1970-01-01
    • 2020-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-26
    • 2020-08-16
    相关资源
    最近更新 更多