JavaScriptで処理を同期的に行いたいと考えている人向け「JSDeferred」
JSDeferredはJavaScriptの非同期処理を扱うライブラリです。
JavaScriptの魅力は非同期処理にあると思いますが、これまでのコーディングスタイルと異なるのでやりづらいと感じる人も多いのではないでしょうか。そこでJavaScriptで同期処理的な実行を可能にするライブラリJSDeferredを使ってみましょう。
サンプルコードです。wait(3)で3秒間処理を停止しています。
サンプルのコードです。
ステップ実行のデモコードです。クリックアクションを受けて処理が実行されます。
Beforeです。ネストが深くなって非常に見づらい、汚いコードです。
Afterです。パラレルを使って平行にデータを読み込みつつ、全てが終わった段階でresultsに結果をまとめて次のメソッドを実行しています。
JSDeferredを使わずに書いている場合に比べて、コードがとても見やすいのが分かるかと思います。チェーンを使って順番に処理を呼び出す、ループ処理を見やすくする、waitを使って処理を一時停止する、Workersを使う、ステップ実行など様々な機能が付与されます。もちろんjQueryと一緒に使うことも可能です。
JSDeferredはJavaScript製、MIT Licenseのオープンソース・ソフトウェアです。
MOONGIFTはこう見る
JavaScriptで一時的に処理を遅らせたりするのは意外と厄介です。setTimeoutを使ったりするのが一般的ですが、配列を数秒おきに評価すると言った場合setTimeoutの時間を変化させる必要があります(一回functionで囲めば良いのですが、ネストがさらに深くなります)。個人的にもこの手の問題にハマったことがあったので当時知っていれば…と思わざるを得ません。
JavaScriptの非同期処理は魅力ですが、同期処理も行いたいというニーズは確実に存在します。またとかくネストが深くなりがちなJavaScriptだけに、それを回避する手段は願ったりでしょう。これからも利用機会の増えるJavaScriptだけにライブラリの進化も求められていると言えます。
JSDeferred - Asynchronous library in JavaScript. Standalone and Compact