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所没有的那样,这里的方式可能有点过分......我只是想知道这种情况是否有优雅轻巧的方式..
有没有人有关于更好的方法处理这个问题的想法?谢谢!
第一种方法根本行不通。它会永远阻塞线程。
缺乏内置的 Promise 支持并不是不使用 Promise 的借口。如果您的库为您提供了事件/回调驱动的方式来等待结果(如果没有,我会感到惊讶),那么您应该使用事件或承诺。
如果不是,并且轮询变量确实是您唯一的选择,那么我想说您的第二种方法几乎是唯一的选择。