async-throttle
命名失敗したと思ったのでasync-throttleに改名した
promiseのthrottleとかdebounceするやつなんだけど、そのへんの名前がnpmに空いていなかった
これを
code:js
import asyncThrottle from '@shokai/async-throttle'
const delay = msec => new Promise(resolve => setTimeout(resolve, msec))
async function countUp (n = 0) {
for (let i = 0; i < 5; i++) {
console.log(n + i)
await delay(100)
}
}
こうすると
code:js
const singleCountUp = asyncThrottle(countUp, {trailing: true})
singleCountUp(0) // run
singleCountUp(10) // skip
singleCountUp(20) // skip
singleCountUp(30) // "sinleCountUp(0)"が終わった後に実行される
skipされた呼び出し元にも、Promise.resolveが返る
この仕様はちょっとまだ迷ってる
trailingオプション
関数を多重呼び出しすると、実行中の関数が終わったら最後の引数を使ってもう1回だけ実行してくれるオプション
skipされた呼び出し元には、最後のおかわり実行の結果が同時にPromsie.resolveされる
callbackをwrapしてPromise化したWebWorkerにガンガンpostMessageしまくってokになる 実行中のWebWorkerにはpostMessageが飛ばなくなる
差分受信毎にcompile()実行しまくって
実行中のWebWorkerにはpostMessageが飛ばないので途中の差分は無視されて
最後の差分を引数にして、最後に1回だけcompile()実行する
というのが簡単に書ける