JavaScript async/await シグナル処理
Promiseのthenを使用しない書き方の例です。
awaitが使えないイベントハンドラ内で使用すると便利
個人的にthen構文が苦手なのでawaitを多用しています。
とりあえずソースコード
export async function main(){
let button = document.getElementById("button");
if(!button)throw "button?";
// ボタンが押されたらシグナル送信
let sigwait = new SignalWait<string>();
button.onclick = ()=>{ sigwait.signal("down"); }
// ボタンが押されるまで待つ
let event = await sigwait.wait();
console.log(event);
// 一定間隔で処理実行
let sigInterval = new SignalWait<number>();
let count = 0;
setInterval(()=>{ sigInterval.signal(count++);}, 1000);
// 描画系なら requestAnimationFrame
while(1){
let cnt = await sigInterval.wait();
//1秒ごとに実行される
console.log(cnt);
}
}
export class SignalWait<T=any>{
resolve : any[];
constructor(){
this.resolve = [];
}
async wait() : Promise<T>{
return new Promise((rs)=>{this.resolve.push(rs);});
}
signal(val : T){
if(this.resolve !== undefined){
for(let rs of this.resolve){
rs(val);
}
this.resolve = [];
}
}
}
いいなと思ったら応援しよう!
この記事が役に立ったという方は、サポートお願いします。今後の製作の励みになります。