在Javascript中轮询本地值的首选方法?

Han*_*Sun 10 javascript jquery asynchronous settimeout node.js

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

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

while(!animationComplete) {
   // Do nothing
}
happenAfterAnimation()
Run Code Online (Sandbox Code Playgroud)

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

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

}
setTimeout(tryHappenAfterAnimation, 100)
Run Code Online (Sandbox Code Playgroud)

第一种解决方案可能有一些开销,第二种解决方案看起来有点脏.

正如future/promise当前版本的Javascript所没有的那样,这里的方式可能有点过分......我只是想知道这种情况是否有优雅轻巧的方式..

有没有人有关于更好的方法处理这个问题的想法?谢谢!

JLR*_*she 4

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

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

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