javascript - 在Javascript中轮询本地值的首选方式?

标签 javascript jquery node.js asynchronous settimeout

例如,有一个名为 animationComplete 的变量(来自第三方库)和一个名为 happenAfterAnimation 的函数:

一个简单的解决方案如下所示:

while(!animationComplete) {
   // Do nothing
}
happenAfterAnimation()

或者像这样更复杂的解决方案:

function tryHappenAfterAnimation() {
  if(animationComplete) {
    happenAfterAnimation()
  } else {
    setTimeout(tryHappenAfterAnimation, 100)
  }

}
setTimeout(tryHappenAfterAnimation, 100)

第一个解决方案可能有一些开销,而第二个解决方案看起来有点脏。

由于 future/promise 在当前版本的 Javascript 中不可用,所以这里可能有点矫枉过正.. 我只是想知道这种情况是否有一种优雅而轻量级的方法..

有没有人知道更好的方法来处理这个问题?谢谢!

最佳答案

第一种方法根本行不通。它将永远阻塞线程。

没有内置的 Promise 支持并不是不使用 Promise 的真正借口。如果您的库为您提供了一种事件/回调驱动的方式来等待结果(如果没有,我会感到惊讶),那么您应该使用事件或 promise 。

如果不是,并且轮询变量确实是您唯一的选择,那么我会说您的第二种方法几乎是唯一的选择。

关于javascript - 在Javascript中轮询本地值的首选方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30451341/

相关文章:

javascript - 脚本完成后,对 chrome 扩展中的弹出窗口或选项卡的 DOM 修改会立即撤消

javascript - 元素上的锤子可防止 -webkit-overflow-scroll : touch of child elements

javascript - 如何在 d3.js 中为这张 map 设置高度和宽度

javascript - 我如何使用 jQuery :contains() selector within a defined element?

javascript - 忽略包含下拉菜单的 gridview 单元格

javascript - Node : How to handle event listening between objects?

node.js - 从 rethinkdb 获取条目到 node.js 博客

node.js - Node.js安装gulp时出错

javascript - typed.js 不适用于第二次尝试

javascript - 如何从 Opera 的外部页面向本地服务器发出跨域请求?