ãã¤ã¯ãã¿ã¹ã¯ã¯ãããã使ãã颿°ãããã°ã©ã ãçµäºããå¾ã JavaScript å®è¡ã¹ã¿ãã¯ã空ã®å ´åã«ã®ã¿å®è¡ãããã¦ã¼ã¶ã¼ã¨ã¼ã¸ã§ã³ããã¹ã¯ãªããã®å®è¡ç°å¢ãåããããã«ä½¿ç¨ãã¦ããã¤ãã³ãã«ã¼ãã«ã³ã³ããã¼ã«ãè¿ãåã«å®è¡ãããçã颿°ã§ãã
ãã®ã¤ãã³ãã«ã¼ãã¯ããã©ã¦ã¶ã¼ã®ã¡ã¤ã³ã¤ãã³ãã«ã¼ãããã¦ã§ãã¯ã¼ã«ã¼ãé§åããã¤ãã³ãã«ã¼ãã®ã©ã¡ããã§ããããã«ãããä»ã®ã¹ã¯ãªããã®å®è¡ã妨ãããªã¹ã¯ãªãã«ä¸ãããã颿°ãå®è¡ãããã¨ãã§ããåæã«ãã¦ã¼ã¶ã¼ã¨ã¼ã¸ã§ã³ãããã¤ã¯ãã¿ã¹ã¯ã«ãã£ã¦è¡ãããã¢ã¯ã·ã§ã³ã«åå¿ããæ©ä¼ãå¾ãåã«ããã¤ã¯ãã¿ã¹ã¯ã確å®ã«å®è¡ãããããã«ãã¾ãã
JavaScript ã®ãããã¹ã¨å¤æ´ç£è¦ API ã¯ãã©ã¡ããã³ã¼ã«ããã¯å®è¡ã«ãã¤ã¯ãã¿ã¹ã¯ãã¥ã¼ã使ç¨ãã¾ãããä»ã«ããç¾å¨ã®ã¤ãã³ãã«ã¼ãã®ãã¹ãçµäºããã¾ã§ä½æ¥ãå»¶æããæ©è½ãå½¹ã«ç«ã¤æãããã¾ãããµã¼ããã¼ãã£ã®ã©ã¤ãã©ãªã¼ããã¬ã¼ã ã¯ã¼ã¯ãããªãã£ã«ã«ãã£ã¦ãã¤ã¯ãã¿ã¹ã¯ã使ç¨ã§ããããã«ããããã«ã queueMicrotask()
ã¡ã½ããã Window
㨠Worker
ã¤ã³ã¿ã¼ãã§ã¤ã¹ã§å
¬éããã¦ãã¾ãã
ãã¤ã¯ãã¿ã¹ã¯ã«ã¤ãã¦æ£ããè°è«ããããã«ã¯ãã¾ã JavaScript ã®ã¿ã¹ã¯ã¨ã¯ä½ãããã¤ã¯ãã¿ã¹ã¯ã¯ã¿ã¹ã¯ã¨ã©ãéãã®ããç¥ã£ã¦ããã¨ä¾¿å©ã§ããããã¯ç°¡åã§åç´ãªèª¬æã§ããããã詳細ãç¥ãããå ´åã¯ãè¨äº å¾¹åºè§£èª¬: ãã¤ã¯ãã¿ã¹ã¯ã¨ JavaScript ã©ã³ã¿ã¤ã ç°å¢ ã®æ å ±ãèªãã§ã¿ã¦ãã ããã
ã¿ã¹ã¯ã¿ã¹ã¯ã¨ã¯ãããã°ã©ã ã®åæå®è¡ãã¤ãã³ãã³ã¼ã«ããã¯ã®å®è¡ãã¤ã³ã¿ã¼ãã«ãã¿ã¤ã ã¢ã¦ãã®çºçãªã©ãæ¨æºçãªã¡ã«ããºã ã«ãã£ã¦å®è¡ãã¹ã±ã¸ã¥ã¼ã«ããã JavaScript ã³ã¼ãã®ãã¨ã§ãããããã¯ãã¹ã¦ã¿ã¹ã¯ãã¥ã¼ã«ã¹ã±ã¸ã¥ã¼ãªã³ã°ããã¾ãã
ã¿ã¹ã¯ã¯ã以ä¸ã®å ´åã«ã¿ã¹ã¯ãã¥ã¼ã«è¿½å ããã¾ãã
<script>
è¦ç´ å
ã®ã³ã¼ããå®è¡ãã¦ï¼ç´æ¥å®è¡ãããã¨ããsetTimeout()
ã¾ã㯠setInterval()
ã§ä½æããã¿ã¤ã ã¢ã¦ãã¾ãã¯ã¤ã³ã¿ã¼ãã«ã«éããã¨ã対å¿ããã³ã¼ã«ããã¯ãã¿ã¹ã¯ãã¥ã¼ã«è¿½å ããã¾ããã³ã¼ããé§åããã¤ãã³ãã«ã¼ãã¯ããããã®ã¿ã¹ã¯ããã¥ã¼ã«å ¥ããããé çªã«æ¬¡ã ã¨å¦çãã¾ããã¤ãã³ãã«ã¼ãã®ä¸åã®å¦çä¸ã«ãã¿ã¹ã¯ãã¥ã¼ã§æãå¤ãå®è¡å¯è½ãªã¿ã¹ã¯ãå®è¡ããã¾ãããã®å¾ããã¤ã¯ãã¿ã¹ã¯ãã¥ã¼ã空ã«ãªãã¾ã§ãã¤ã¯ãã¿ã¹ã¯ãå®è¡ããããã©ã¦ã¶ã¼ã¯ã¬ã³ããªã³ã°ã®æ´æ°ãé¸ã¹ã¾ãããã®å¾ããã©ã¦ã¶ã¼ã¯ã¤ãã³ãã«ã¼ãã®æ¬¡ã®å復å¦çã«ç§»ããã¾ãã
ãã¤ã¯ãã¿ã¹ã¯æåããã¤ã¯ãã¿ã¹ã¯ã¨ã¿ã¹ã¯ã®éãã¯å°ããããã«è¦ãã¾ããã©ã¡ãããã¥ã¼ã«å ¥ããããé©åãªã¿ã¤ãã³ã°ã§å®è¡ããã JavaScript ã®ã³ã¼ãã§æ§æããã¦ãã¾ããããããã¤ãã³ãã«ã¼ãã¯å復ãå§ã¾ã£ãã¨ãã«ãã¥ã¼ã«åå¨ããã¿ã¹ã¯ã ããæ¬¡ã ã¨å®è¡ããã®ã«å¯¾ãããã¤ã¯ãã¿ã¹ã¯ã®ãã¥ã¼ã¯ã¨ã¦ãç°ãªãæ¹æ³ã§å¦çããã¾ãã
主ãªéã㯠2 ã¤ããã¾ãã
ã¾ããã¿ã¹ã¯ãçµäºãããã³ã«ãã¤ãã³ãã«ã¼ãã¯ãã¿ã¹ã¯ãä»ã® JavaScript ã³ã¼ãã«å¶å¾¡ãè¿ãã¦ãããã©ããããã§ãã¯ãã¾ããããããã§ãªããã°ããã¤ã¯ãã¿ã¹ã¯ãã¥ã¼ã«ãããã¹ã¦ã®ãã¤ã¯ãã¿ã¹ã¯ãå®è¡ãã¾ãããã¤ã¯ãã¿ã¹ã¯ãã¥ã¼ã¯ãã¤ãã³ããä»ã®ã³ã¼ã«ããã¯ãå¦çããå¾ãå«ããã¤ãã³ãã«ã¼ãã®å復ãã¨ã«è¤æ°åå¦çããã¾ãã
次ã«ããã¤ã¯ãã¿ã¹ã¯ã queueMicrotask()
ãå¼ã³åºãã¦ãã¥ã¼ã«ããã«ãã¤ã¯ãã¿ã¹ã¯ã追å ããã¨ããããã®æ°ãã追å ããããã¤ã¯ãã¿ã¹ã¯ã¯æ¬¡ã®ã¿ã¹ã¯ãå®è¡ãããåã«å®è¡ããã¾ããããã¯ãã¤ãã³ãã«ã¼ããããã¨ã追å ããç¶ãã¦ãããã¥ã¼ã«ä½ãæ®ããªããªãã¾ã§ãã¤ã¯ãã¿ã¹ã¯ãå¼ã³ç¶ããããã§ãã
è¦å: ãã¤ã¯ãã¿ã¹ã¯ã¯ããèªèº«ãããã«ãã¤ã¯ãã¿ã¹ã¯ããã¥ã¼ã«å ¥ãããã¨ãã§ããã¤ãã³ãã«ã¼ãã¯ãã¥ã¼ã空ã«ãªãã¾ã§ãã¤ã¯ãã¿ã¹ã¯ãå¦çãç¶ããã®ã§ãã¤ãã³ãã«ã¼ãããã¤ã¯ãã¿ã¹ã¯ãå»¶ã ã¨å¦çãç¶ããã¨ããç¾å®çãªãªã¹ã¯ãåå¨ãã¾ããå帰çã«ãã¤ã¯ãã¿ã¹ã¯ã追å ããæ¹æ³ã«ã¯æ³¨æãå¿ è¦ã§ãã
ãã¤ã¯ãã¿ã¹ã¯ã®ä½¿ç¨ãã®è©±ãé²ããåã«ãã»ã¨ãã©ã®éçºè ã¯ãã¤ã¯ãã¿ã¹ã¯ããã¾ã使ããªãã§ãããã¨ãããã¨ããããä¸åº¦æ¸ãã¦ããã¾ãããã¤ã¯ãã¿ã¹ã¯ã¯ãæè¿ã®ãã©ã¦ã¶ã¼ãã¼ã¹ã® JavaScript éçºã«ãããé常ã«ç¹æ®ãªæ©è½ã§ãã¦ã¼ã¶ã¼ã®ã³ã³ãã¥ã¼ã¿ã¼ã§çºçãããã¨ãå¾ ã¤é·ãä¸é£ã®ä½æ¥ã®ä¸ã§ãä»ã®ä½æ¥ã®åã«ã¸ã£ã³ãããã³ã¼ããã¹ã±ã¸ã¥ã¼ã«ãããã¨ãå¯è½ã«ãã¾ãããã®æ©è½ãä¹±ç¨ããã¨ãããã©ã¼ãã³ã¹ã®åé¡ã«ã¤ãªããã¾ãã
ãã¤ã¯ãã¿ã¹ã¯ã®ãã¥ã¼æ¿å ¥ãã®ãããé常ããã¤ã¯ãã¿ã¹ã¯ã¯ä»ã«è§£æ±ºçããªãå ´åãã¾ãã¯å®è£
ãã¦ããæ©è½ãä½ãããã«ãã¤ã¯ãã¿ã¹ã¯ã使ãå¿
è¦ããããã¬ã¼ã ã¯ã¼ã¯ãã©ã¤ãã©ãªã¼ãä½ãå ´åã«ã®ã¿ã使ç¨ãã¹ãã§ããããã¾ã§ããã¤ã¯ãã¿ã¹ã¯ããã¥ã¼ã«æ¿å
¥ããããã®ããªãã¯ã¯ããã¾ãããï¼ããã«è§£æ±ºãããããã¹ãä½ããªã©ï¼ãqueueMicrotask()
ã¡ã½ããã®è¿½å ã«ãããããªãã¯ãªãã§å®å
¨ã«ãã¤ã¯ãã¿ã¹ã¯ãå°å
¥ããããã®æ¨æºçãªæ¹æ³ã追å ããã¾ããã
queueMicrotask()
ãå°å
¥ãããã¨ã§ããã¤ã¯ãã¿ã¹ã¯ã使ããããã«ãããã¹ã使ç¨ãã¦ãã£ããè¡ãã¨ãã«çºçããçãåé¿ãããã¨ãã§ãã¾ããä¾ãã°ããã¤ã¯ãã¿ã¹ã¯ã使ããããã«ãããã¹ã使ç¨ããå ´åãã³ã¼ã«ããã¯ã«ãã£ã¦æããããä¾å¤ã¯æ¨æºçãªä¾å¤ã¨ãã¦å ±åãããã®ã§ã¯ãªãããããã¹ãæå¦ããããã®ã¨ãã¦å ±åããã¾ããã¾ãããããã¹ã®ä½æã¨ç ´æ£ã¯ããã¤ã¯ãã¿ã¹ã¯ãé©åã«ãã¥ã¼ã«æ¿å
¥ãã颿°ãåé¿ãããæéã¨ã¡ã¢ãªã¼ã®ä¸¡æ¹ã«ããã¦è¿½å ã®ãªã¼ãã¼ããããåãã¾ãã
ã³ã³ããã¹ãããã¤ã¯ãã¿ã¹ã¯ãå¦çãã¦ããéã«å¼ã³åºã JavaScript 颿° (Function
) ã queueMicrotask()
ã¡ã½ããã«æ¸¡ãã¾ãããã®ã¡ã½ããã¯ãç¾å¨ã®å®è¡ã³ã³ããã¹ãã«å¿ã㦠Window
ã¾ã㯠Worker
ã¤ã³ã¿ã¼ãã§ã¤ã¹ã«ãã£ã¦å®ç¾©ãããã°ãã¼ãã«ã³ã³ããã¹ãã§å
¬éããã¾ãã
queueMicrotask(() => {
/* ããã«ãã¤ã¯ãã¿ã¹ã¯å
ã§å®è¡ãããã³ã¼ããç½®ã */
});
ãã¤ã¯ãã¿ã¹ã¯é¢æ°èªä½ã¯ã弿°ãåãããå¤ãè¿ãã¾ããã
ãã¤ã¯ãã¿ã¹ã¯ã使ç¨ãã¹ãæãã®ç¯ã§ã¯ããã¤ã¯ãã¿ã¹ã¯ãç¹ã«æç¨ã§ããã·ããªãªãç´¹ä»ãã¾ããä¸è¬çã«ã¯ã JavaScript ã®å®è¡ã³ã³ããã¹ãã®æ¬ä½ãçµäºããå¾ãã¤ãã³ããã³ãã©ã¼ãã¿ã¤ã ã¢ã¦ããã¤ã³ã¿ã¼ãã«ããã®ä»ã®ã³ã¼ã«ããã¯ãå¦çãããåã«ãçµæããã£ããã£ããããã§ãã¯ããããã¯ãªã¼ã³ã¢ãããå®è¡ããããããã¨ãæãã¾ãã
ããã¯ãã¤å½¹ã«ç«ã¤ã®ã§ããããï¼
ãã¤ã¯ãã¿ã¹ã¯ã使ç¨ãã主ãªçç±ã¯æ¬¡ã®ã¨ããã§ããçµæããã¼ã¿ãåæçã«å©ç¨ã§ããå ´åã§ããã¿ã¹ã¯ã®ä¸è²«ããé åºä»ããä¿è¨¼ããã¨åæã«ãã¦ã¼ã¶ã¼ãèå¥ã§ããæä½ã®é ãã®ãªã¹ã¯ã使¸ããããã§ãã
ãããã¹ã®æ¡ä»¶ä»ã使ç¨ã«é¢ããä¸¦ã¹æ¿ãã®ç¢ºä¿ãã¤ã¯ãã¿ã¹ã¯ãå®è¡é åºã常ã«ä¸è²«ãã¦ãããã¨ãä¿è¨¼ããããã«ä½¿ããã 1 ã¤ã®ç¶æ³ã¯ããããã¹ã if...else
æï¼ã¾ãã¯ä»ã®æ¡ä»¶æï¼ã® 1 ã¤ã®ç¯ã§ä½¿ãããä»ã®ç¯ã§ã¯ä½¿ãããªãã¨ãã§ããæ¬¡ã®ãããªã³ã¼ããèãã¦ã¿ã¦ãã ããã
customElement.prototype.getData = (url) => {
if (this.cache[url]) {
this.data = this.cache[url];
this.dispatchEvent(new Event("load"));
} else {
fetch(url)
.then((result) => result.arrayBuffer())
.then((data) => {
this.cache[url] = data;
this.data = data;
this.dispatchEvent(new Event("load"));
});
}
};
ããã§ç´¹ä»ããåé¡ã¯ã if...else
æã® 1 ã¤ã®ãã©ã³ãã§ã¿ã¹ã¯ã使ãï¼ç»åããã£ãã·ã¥ã«ããå ´åï¼ã else
ç¯ã§ãããã¹ã使ç¨ãããã¨ã«ãããä¾ãã°ä»¥ä¸ã®ããã«ãå¦çã®é åºãç°ãªãç¶æ³ãçºçãããã¨ã§ãã
element.addEventListener("load", () => console.log("Loaded data"));
console.log("Fetching dataâ¦");
element.getData();
console.log("Data fetched");
ãã®ã³ã¼ãã 2 åé£ç¶ã§å®è¡ããã¨ã以ä¸ã®ãããªçµæã«ãªãã¾ãã
ãã¼ã¿ããã£ãã·ã¥ãã¦ããªãå ´å
Fetching data Data fetched Loaded data
ãã¼ã¿ããã£ãã·ã¥ãã¦ããå ´å
Fetching data Loaded data Data fetched
ããã«æªããã¨ã«ããã®ã³ã¼ãã®å®è¡ãçµäºããã¾ã§ã«ãè¦ç´ ã® data
ããããã£ãè¨å®ããããã¨ãããã°ãè¨å®ãããªããã¨ãããã¾ãã
ãã® 2 ã¤ã®ç¯ã®ãã©ã³ã¹ãã¨ãããã«ã if
ç¯ã§ãã¤ã¯ãã¿ã¹ã¯ã使ç¨ãããã¨ã§ããããã®æä½ã®ä¸è²«ããé åºãä¿è¨¼ãããã¨ãã§ãã¾ãã
customElement.prototype.getData = (url) => {
if (this.cache[url]) {
queueMicrotask(() => {
this.data = this.cache[url];
this.dispatchEvent(new Event("load"));
});
} else {
fetch(url)
.then((result) => result.arrayBuffer())
.then((data) => {
this.cache[url] = data;
this.data = data;
this.dispatchEvent(new Event("load"));
});
}
};
ããã¯ããã¤ã¯ãã¿ã¹ã¯å
ã§ data
ã®è¨å®ã¨ load
ã¤ãã³ãã®çºè¡ã®ä¸¡æ¹ãå¦çããããã¨ã§ãç¯ã®ãã©ã³ã¹ãåã£ã¦ãã¾ãï¼if
ç¯ã§ã¯ queueMicrotask()
ã使ãã else
ç¯ã§ã¯ fetch()
ã使ããããã¹ã使ç¨ããï¼ã
ã¾ãããã¤ã¯ãã¿ã¹ã¯ã使ç¨ãã¦ãæ§ã ãªã½ã¼ã¹ããã®è¤æ°ã®ãªã¯ã¨ã¹ããåä¸ã®ãããã«åéããåã種é¡ã®ä½æ¥ãå¦çããããã«è¤æ°ã®å¼ã³åºãã«ä¼´ãå¯è½æ§ã®ãããªã¼ãã¼ããããåé¿ãããã¨ãã§ãã¾ãã
以ä¸ã®ã¹ããããã¯ãè¤æ°ã®ã¡ãã»ã¼ã¸ãé åã«ããããã颿°ã使ããã³ã³ããã¹ããçµäºããã¨ãã«ããããåä¸ã®ãªãã¸ã§ã¯ãã¨ãã¦éä¿¡ããããã«ãã¤ã¯ãã¿ã¹ã¯ã使ç¨ãã¾ãã
const messageQueue = [];
let sendMessage = (message) => {
messageQueue.push(message);
if (messageQueue.length === 1) {
queueMicrotask(() => {
const json = JSON.stringify(messageQueue);
messageQueue.length = 0;
fetch("url-of-receiver", json);
});
}
};
sendMessage()
ãå¼ã³åºãããã¨ãã¾ãæå®ãããã¡ãã»ã¼ã¸ãã¡ãã»ã¼ã¸ãã¥ã¼ã®é
åã«ããã·ã¥ããã¾ãããããããé¢ç½ãã®ã§ãã
é
åã«è¿½å ããã¡ãã»ã¼ã¸ãæåã®ãã®ã§ããã°ãããããéä¿¡ãããã¤ã¯ãã¿ã¹ã¯ããã¥ã¼ã«å
¥ãã¾ãããã¤ã¯ãã¿ã¹ã¯ã¯ããã¤ãã®ããã«ã JavaScript ã®å®è¡ãã¹ãæä¸ä½ã«éããã¨ããã³ã¼ã«ããã¯ãå®è¡ããç´åã«å®è¡ããã¾ããã¤ã¾ãããã®éã«è¡ããã sendMessage()
ã®ãããªãå¼ã³åºãã¯ãã¡ãã»ã¼ã¸ãã¡ãã»ã¼ã¸ãã¥ã¼ã«ããã·ã¥ãã¾ããããã¤ã¯ãã¿ã¹ã¯ã追å ããåã«é
åã®é·ãããã§ãã¯ãããããæ°ãããã¤ã¯ãã¿ã¹ã¯ã¯ãã¥ã¼ã«å
¥ãã¾ããã
ãã¤ã¯ãã¿ã¹ã¯ãå®è¡ãããã¨ããããã¯æ½å¨çã«å¤ãã®ã¡ãã»ã¼ã¸ãå¾
ã£ã¦ããé
åãæã£ã¦ãã¾ããããã¯ã JSON.stringify()
ã¡ã½ããã使ç¨ã㦠JSON ã¨ãã¦ãããã¨ã³ã³ã¼ããããã¨ããå§ã¾ãã¾ãããã®å¾ãé
åã®å
容ãä¸è¦ã«ãªã£ãã®ã§ã messageQueue
é
åã空ã«ãã¾ããæå¾ã«ãfetch()
ã¡ã½ãããç¨ãã¦ã JSON æååããµã¼ãã¼ã«éä¿¡ãã¾ãã
ããã«ãããã¤ãã³ãã«ã¼ãã®åãã¤ãã¬ã¼ã·ã§ã³ã®ä¸ã§è¡ããã sendMessage()
ã®ãã¹ã¦ã®å¼ã³åºãããã¿ã¤ã ã¢ã¦ããªã©ã®ä»ã®ã¿ã¹ã¯ã«ãã£ã¦éä¿¡ãé
ããå¯è½æ§ãæé¤ãã¦ãåã fetch()
æä½ã«ã¡ãã»ã¼ã¸ã追å ãããã¨ãã§ãã¾ãã
ãµã¼ãã¼ã¯ JSON æååãåä¿¡ããããããããããã³ã¼ããã¦ãçµæã®é åã®ä¸ã§è¦ã¤ããã¡ãã»ã¼ã¸ãå¦çãã¾ãã
ä¾ åç´ãªãã¤ã¯ãã¿ã¹ã¯ã®ä¾ãã®åç´ãªä¾ã§ã¯ããã¤ã¯ãã¿ã¹ã¯ããã¥ã¼ã«å ¥ãããããã¨ã§ããã®æä¸ä½ã¹ã¯ãªããã®æ¬ä½ãå®è¡ããçµãã£ãå¾ã«ããã¤ã¯ãã¿ã¹ã¯ã®ã³ã¼ã«ããã¯ãå®è¡ããããã¨ããããã¾ãã
JavaScriptconst logElem = document.getElementById("log");
const log = (s) => (logElem.innerText += `${s}\n`);
次ã®ã³ã¼ãã§ã¯ããã¤ã¯ãã¿ã¹ã¯ã®å®è¡ãã¹ã±ã¸ã¥ã¼ã«ããããã« queueMicrotask()
ãå¼ã³åºãã¦ãã¾ãããã®å¼ã³åºãã¯ãç»é¢ã«ããã¹ããåºåããã«ã¹ã¿ã 颿°ã§ãã log()
ã¸ã®å¼ã³åºãã§æ¬ããã¦ãã¾ãã
log("Before enqueueing the microtask");
queueMicrotask(() => {
log("The microtask has run.");
});
log("After enqueueing the microtask");
çµæ ã¿ã¤ã ã¢ã¦ãã¨ãã¤ã¯ãã¿ã¹ã¯ã®ä¾
ãã®ä¾ã§ã¯ãã¿ã¤ã ã¢ã¦ã㯠0 ããªç§å¾ã«ï¼ã¾ãã¯ãã§ããã ãæ©ããï¼çºçããããã«ã¹ã±ã¸ã¥ã¼ã«ããã¦ãã¾ããããã¯ãæ°ããã¿ã¹ã¯ãã¹ã±ã¸ã¥ã¼ãªã³ã°ããã¨ãï¼ä¾ãã° setTimeout()
ï¼ã¨ãã¤ã¯ãã¿ã¹ã¯ã使ãã¨ãã®ãã§ããã ãæ©ãããä½ãæå³ãããã®éãã示ãã¦ãã¾ãã
const logElem = document.getElementById("log");
const log = (s) => (logElem.innerText += `${s}\n`);
次ã®ã³ã¼ãã§ã¯ããã¤ã¯ãã¿ã¹ã¯ã®å®è¡ãã¹ã±ã¸ã¥ã¼ã«ããããã« queueMicrotask()
ãå¼ã³åºãã¦ãã¾ãããã®å¼ã³åºãã¯ãç»é¢ã«ããã¹ããåºåããã«ã¹ã¿ã 颿°ã§ãã log()
ã¸ã®å¼ã³åºãã§æ¬ããã¦ãã¾ãã
以ä¸ã®ã³ã¼ãã§ã¯ã 0 ããªç§å¾ã«ã¿ã¤ã ã¢ã¦ããçºçããããã«ã¹ã±ã¸ã¥ã¼ã«ãããã¤ã¯ãã¿ã¹ã¯ããã¥ã¼ã«å
¥ãã¦ãã¾ããããã¯ã追å ã®ã¡ãã»ã¼ã¸ãåºåããããã« log()
ãå¼ã³åºããã¨ã§æ¬ããã¦ãã¾ãã
const callback = () => log("Regular timeout callback has run");
const urgentCallback = () => log("*** Oh noes! An urgent callback has run!");
log("Main program started");
setTimeout(callback, 0);
queueMicrotask(urgentCallback);
log("Main program exiting");
çµæ
ã¡ã¤ã³ããã°ã©ã æ¬ä½ããè¨é²ãããåºåãæåã«è¡¨ç¤ºãããæ¬¡ã«ãã¤ã¯ãã¿ã¹ã¯ããã®åºåãããã¦ã¿ã¤ã ã¢ã¦ãã®ã³ã¼ã«ããã¯ã®é ã«è¡¨ç¤ºããããã¨ã«æ³¨æãã¦ãã ãããããã¯ãã¡ã¤ã³ããã°ã©ã ã®å®è¡ãå¦çãã¦ããã¿ã¹ã¯ãçµäºããã¨ããã¿ã¤ã ã¢ã¦ãã®ã³ã¼ã«ããã¯ãããã¿ã¹ã¯ãã¥ã¼ããããã¤ã¯ãã¿ã¹ã¯ãã¥ã¼ã®æ¹ãå ã«å¦çãããããã§ããã¿ã¹ã¯ã¨ãã¤ã¯ãã¿ã¹ã¯ã¯å¥ã ã®ãã¥ã¼ã«ä¿åããããã¤ã¯ãã¿ã¹ã¯ãæåã«å®è¡ããããã¨ãè¦ãã¦ããã¨ããã®ç¹ãæ´çããã®ã«å½¹ç«ã¡ã¾ãã
颿°ãããã¤ã¯ãã¿ã¹ã¯ãã®ä¾ã§ã¯ãããã¤ãã®ä½æ¥ãè¡ã颿°ã追å ãããã¨ã§ãåã®ä¾ãå°ãæ¡å¼µãã¦ãã¾ãããã®é¢æ°ã¯ queueMicrotask()
ã使ã£ã¦ãã¤ã¯ãã¿ã¹ã¯ã®ã¹ã±ã¸ã¥ã¼ãªã³ã°ãè¡ã£ã¦ãã¾ãããã®ä¾ã§éè¦ãªãã¨ã¯ããã¤ã¯ãã¿ã¹ã¯ã¯é¢æ°ãçµäºããã¨ãã«å¦çãããã®ã§ã¯ãªããã¡ã¤ã³ããã°ã©ã ãçµäºããã¨ãã«å¦çãããã¨ãããã¨ã§ãã
const logElem = document.getElementById("log");
const log = (s) => (logElem.innerText += `${s}\n`);
ã¡ã¤ã³ããã°ã©ã ã®ã³ã¼ãã¯ä»¥ä¸ã®éãã§ããããã§ doWork()
颿°ã¯ queueMicrotask()
ãå¼ã³åºãã¾ãããããã§ããã¤ã¯ãã¿ã¹ã¯ã¯ããã°ã©ã å
¨ä½ãçµäºããã¾ã§èµ·åãã¾ããããªããªããã¿ã¹ã¯ãçµäºãã¦å®è¡ã¹ã¿ãã¯ä¸ã«ä½ããªããªã£ãã¨ããããã ããã§ãã
const callback = () => log("Regular timeout callback has run");
const urgentCallback = () => log("*** Oh noes! An urgent callback has run!");
const doWork = () => {
let result = 1;
queueMicrotask(urgentCallback);
for (let i = 2; i <= 10; i++) {
result *= i;
}
return result;
};
log("Main program started");
setTimeout(callback, 0);
log(`10! equals ${doWork()}`);
log("Main program exiting");
çµæ é¢é£æ
å ±
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4