非同期プログラミングを驚きのシンプルさに (するかもしれない) Flow.js を公開しました。
(ε・◇・)з o O (
(ミ・◇・ミ) o O ( あたし。ずっと思ってた…
(ミ・◇・ミ) o O ( あたしの脳みそだと Deferred/Promises は、ちょっと難しすぎるって…
(ミ・◇・ミ) o O ( jQuery.Deferred 解説記事をいくつかみたけど、すごく… モジモジしてて、ちょっと縦長すぎるんですもの…
(ミ・◇・ミ) o O ( だから作っちゃった…
).done();
非同期処理をシンプルに書ける、とても小さなライブラリをリリースしました。
Deferred/Promises は既存の構造や, そもそもの考え方を大きく改変する必要がありますが、
flow.js はあまり大きな違和感もなく、現在の流れを維持したまま導入できると思います。
使い方はこちらをごらんください
http://www.slideshare.net/uupaa/flowjs
リポジトリはこちらです
https://github.com/uupaa/flow.js
$ npm install flow_js でもインストールできます
実は、3年ほど前に実装したコードをとあるプロジェクトで使っておりまして、
「この非同期処理のコードよくわからないから、分かるようにしてよ」と言われたのがきっかけです。
せっかくなので、より多くの人にシェアできる形でリリースしましょうと��りました。
そんな訳なので、Deferredの実装に対抗して急に作ったわけでもなく、基本的には枯れている実装だったりします。
コールバックの拡張とダックタイピング
以下のようにコールバックをうけとる関数を、Flowのインスタンスも受け取るように改造すると、中々便利だったりします。
instanceof はちょっと遅いので、大抵のケースでは fn.pass ? fn.pass() でも良いでしょう。
function hoge(fn) { // @arg Function: fn(); }
function hoge(fn) { // @arg Function/Flow: fn.pass ? fn.pass() : fn(); }
function hoge(fn) { // @arg Function/Flow: fn instanceof Flow ? fn.pass() : fn(); }