cancelAnimationFrame如何处理回调中的副作用?

时间:2013-06-13 18:57:48

标签: javascript webgl

requestAnimationFrame采用在显示帧之前运行的回调函数。假设这个回调函数有副作用,如:

function callback {
  ++GLOBAL_VAR_A;
  ++GLOBAL_VAR_B;
}

如果我对该回调的请求调用cancelAnimationFrame,那么回调是否是原子的?换句话说,回调是保证完全执行还是根本不执行?或者取消假可以GLOBAL_VAR_A增加,但不是GLOBAL_VAR_B

此外,如果此回调是原子的,如果我成功取消了帧,那么回调是否会执行?

1 个答案:

答案 0 :(得分:1)

Javascript是单线程的,所以这个问题无法显示:调用cancelAF时是否调用了回调函数。如果它被调用,则什么也没做。如果没有调用它,它将不会被调用。你的问题表明cancelAF也会取消正在进行的回调,但规范并没有说明这一点:MDN描述是:

  

window.cancelAnimationFrame

     

取消先前通过a安排的动画帧请求   调用window.requestAnimationFrame()。

https://developer.mozilla.org/en-US/docs/Web/API/window.cancelAnimationFrame)。

这是一个被取消的“请求”,而不是回调。

也许更清楚一点:如果你在++ GLOBAL_VAR_A之后和++ GLOBAL_VAR_B之前调用cancelAF,那么这意味着回调已经全部调用,而cancelAF什么也没做。

cancelAF没有返回值,所以你不能告诉你“取消(领导)框架成功”