2022-12-20
ちりつも」のレベルアップ演出のソースコード「level-up.component.ts」で見かけた次のコード。紙吹雪を出して、600ミリ秒、400ミリ秒毎に4回、花火(star)を表示し、完了1秒後にshowとfalseにし、更に400ミリ秒後に閉じるボタンを有効にする感じに見えます。 this.confetti.confetti() timer(600, 400).pipe(take(4)).subscribe(() => { this.confetti.star(Math.random(), Math.random()) }, () => {}, () => { timer(1000).subscribe(() => { this.show = false timer(400).subscribe(() => { this.canRemove.emit() }) }) }) timer、pipe、take、subscribeは、RxJSという非同期処理をシンプルに書くためのオープンソースライブラリ。なんだか楽しそうなので、ESモジュール化しておき、色々使ってみようと思います。


「RxJS - Reactive Extensions Library for JavaScript」

GitHubで公開されているオープンソース、forkして、ESモジュール化して「RxJS-es」として公開しました。


「RxJS-es test.html」

このように ES-Jam でも動かせますし、下記のコードをDenoで動かすことで、簡単にRxJSを使うことができます! import { from, take } from "https://js.sabae.cc/rxjs.js"; const generateDoubles = function* (seed) { let i = seed; while (true) { yield i; i = 2 * i; // double it } }; const iterator = generateDoubles(3); const result = from(iterator).pipe(take(10)); result.subscribe(x => console.log(x)); プログラミングをしていて複雑だなぁと思った時に使ってみましょう!

おまけ、ESモジュール化した手順
RxJSをcloneして、import/exportに".js"を加えるプログラム addjs.js を作成、tslibをESモジュール化、deno bundleを使って1ファイルにして、terserでコンパクト化。

yarn install yarn run build:global deno run -A addjs.js deno bundle dist/esm-js/index.js > bundle.js terser -c -m ---module -o rxjs.js bundle.js

links
- RxJS
- Support rxjs for deno · Issue #5486 · ReactiveX/rxjs

Tweet
クリエイティブ・コモンズ・ライセンス
本ブログの記事や写真は「Creative Commons — CC BY 4.0」の下に提供します。記事内で紹介するプログラムや作品は、それぞれに記載されたライセンスを参照ください。
CC BY / @taisukef / アイコン画像 / プロフィール画像 / 「一日一創」画像 / RSS