![](/img/trans.png)
[英]requestAnimationFrame inside another requestAnimationFrame
[英]requestAnimationFrame inside a Promise
有人可以解釋一下這個 function 的作用嗎? 我了解requestAnimationFrame
在繪制和渲染幀之前是如何執行的,但我不確定將它放入 promise 有什么用處。
function nextFrame() {
return new Promise(requestAnimationFrame)
}
Promise構造函數接受所謂的executor
器 function 作為它的第一個參數,可用於控制 promise 執行流程。 這個 function 有兩個 arguments: resolve
和reject
- 您調用這些函數來解決或拒絕 promise。
const promise = new Promise(function executor(resolve, reject) {
resolve();
// reject();
});
當您使用new Promise(executor)
創建新的 promise 時,該executor
程序 function 會在內部自動調用。
接下來, requestAnimationFrame需要一個回調,只要瀏覽器准備好執行您的幀代碼,就會觸發該回調。
requestAnimationFrame(function frameCallback(timestamp) {
// ...frame code
});
如果您嘗試在executor(resolve, reject)
簽名之上施加requestAnimationFrame(frameCallback)
簽名,那么
requestAnimationFrame
是executor
functionframeCallback
是resolve
function 總而言之,使用new Promise(requestAnimationFrame)
requestAnimationFrame
)。 當requestAnimationFrame
被調用時,瀏覽器在內部將其調度為對 animation 的請求。requestAnimationFrame
的回調。 在我們的例子中, resolve
用作回調。 此外, resolve
將使用requestAnimationFrame
的時間戳傳遞,即 promise 將使用時間戳值解析。 我想這段代碼可以用來 Promise-ify requestAnimationFrame
,構造的 promise 將在requestAnimationFrame
回調被調用時被解析。
const promise = new Promise(requestAnimationFrame);
promise.then(function frameCallback(timestamp) => {
// ... frame code
});
...或者簡單地說:
await new Promise(requestAnimationFrame);
// <-- body of the former frameCallback function
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.