有人可以解释一下这个函数的作用吗?我知道requestAnimationFrame
在一帧中的绘画和渲染之前执行,但我不太确定把它放在一个 promise 中的实用性。
function nextFrame() {
return new Promise(requestAnimationFrame)
}
有人可以解释一下这个函数的作用吗?我知道requestAnimationFrame
在一帧中的绘画和渲染之前执行,但我不太确定把它放在一个 promise 中的实用性。
function nextFrame() {
return new Promise(requestAnimationFrame)
}
Promise 构造器接受一个被称为 executor
函数的参数作为其第一个参数,它可以用来控制 Promise 的执行流程。这个函数有两个参数:resolve
和 reject
- 这是你调用以解决或拒绝 Promise 的函数。
const promise = new Promise(function executor(resolve, reject) {
resolve();
// reject();
});
创建一个新的 Promise 时,executor
函数会自动内部调用。
而 requestAnimationFrame 需要一个回调函数,该函数将在浏览器准备执行帧代码时触发。
requestAnimationFrame(function frameCallback(timestamp) {
// ...frame code
});
executor(resolve, reject)
签名之上强制使用requestAnimationFrame(frameCallback)
签名,则:
requestAnimationFrame
是executor
函数frameCallback
是resolve
函数new Promise(requestAnimationFrame)
:
requestAnimationFrame
)。当调用requestAnimationFrame
时,
浏览器会在内部将其安排为请求动画帧。requestAnimationFrame
的回调函数。在我们的例子中,resolve
作为一个回调函数。此外,resolve
将被传递requestAnimationFrame
的时间戳,即承诺将解决为时间戳值。requestAnimationFrame
转换为Promise,构建的Promise将在调用requestAnimationFrame
回调时立即解析。const promise = new Promise(requestAnimationFrame);
promise.then(function frameCallback(timestamp) => {
// ... frame code
});
async
函数内部编写await nextFrame();
,例如在每个动画步骤中应该运行一次的循环的顶部。 - Matthias Fripp