※ ChatGPTを利用し、要約された質問です(原文:バックグラウンドでも動く setInterval)
バックグラウンドでも動く setInterval
このQ&Aのポイント
バックグラウンドでも動く setIntervalのサンプルコードを探していたところ、superInterval.jsというコードを見つけました。
しかし、その書き方や使い方が分かりにくく、どのような処理をしているのか理解できません。
特に、'=>' という部分や、 '() => cb(...args)' という記述が意味不明です。
https://gist.github.com/kawaz/72f61d8389fed0e9d4e7dc9eb01b39c8
setIntervalはブラウザのタブがバックグラウンドで動作しないとのことで動作させるためのサンプルコードが
ないかと調べていたところ上記サイトを見つけました。
ただ、その書きっぷりも訳が分らない & 何をやっているのかわからないです。
当方が昔、見たことのあるJavaScriptとはまるで違っていて「そんな書き方あったっけ?」
という感じです。
例えばsuperInterval.jsの下記の部分に出てくる '=>' というのが謎でそれぞれ何を意味しているのでしょうか?
とくに3つ目の 「() => cb(...args)」なんていうのが???です
const superInterval = (cb, interval=1000, ...args) => {
const code = `self.addEventListener('message', msg=>{setInterval(()=>self.postMessage(null), msg.data)})`
w.onmessage = () => cb(...args)
(superInterval.js)
const superInterval = (cb, interval=1000, ...args) => {
try {
const code = `self.addEventListener('message', msg=>{setInterval(()=>self.postMessage(null), msg.data)})`
const w = new Worker(`data:text/javascript;base64,${btoa(code)}`)
w.onmessage = () => cb(...args)
w.postMessage(interval)
return {stop:()=>w.terminate()}
} catch(_){
// 実装の問題またはCSPによる拒否などで Worker が使えなければ普通の setInterval を使う
const id = setInterval(cb, interval, ...args)
return {stop:()=>clearInterval(id)}
}
}
(使い方)
{
const log = (...args) => console.log(...args)
const {stop} = superInterval(log, 500, 1, {a:2}, [3])
setTimeout(stop, 3000)
}
お礼
ありがとうございます。アロー関数という記法なのですね。 ちなみに、superInterval.jsの内容は何をやっているのかわかりますでしょうか? const code = `self.addEventListener('message', msg=>{setInterval(()=>self.postMessage(null), msg.data)})` の部分がよくわからないのです。 setIntervalの第一引数に関数定義「()=>self.postMessage(null)」を渡し、第二引数にmsg.data を渡しています。 これはmessageイベントが発生したらsetIntervalで定期的にpostMessageでWorkerにメッセージ(msg.data)を送信する ということなのでしょうか? そしてその処理をWorkerに渡して処理をバックグラウンドで動かすということをやっているのでしょうか?