Kanasan.JS JSDeferred コードリーディング
2009-06-30


すっかり記事を書くのが遅れてしまいましたが、Kanasan.JS JSDeferred コードリーディングへ行ってきました (参加者ブログ記事一覧)。JSDeferredcho45 さん作の、非同期処理を簡単に記述するためのライブラリです。簡単なリファレンスもありますが、実際に動かせるサンプルのほうがどんなものか感覚をつかめると思います。

Deferred オブジェクト

JSDeferred では、ひとつの処理をひとつの Deferred オブジェクトとして表現し、処理の流れは Deferred オブジェクトを順につなげた Deferred チェーンで表します。Deferred オブジェクトは三つのプロパティを持ちます。

callback.ok プロパティ
(正常) 処理の本体を表す関数。
callback.ng プロパティ
例外処理の本体を表す関数。
_next プロパティ
Deferred チェーン上の次の処理 (継続) を表す Deferred オブジェクト。

さらに、Deferred オブジェクトの実行状態を意識すると、JSDeferred を使って書かれたコードが読みやすくなるのではないかと思います。

待機 (idle) 状態
処理が実行されない状態。call/fail メソッドが呼び出されると実行中状態へ移る。
実行待ち (waiting) 状態
処理がそのうち実行される状態。cancel メソッドが呼び出されると待機状態へ移る。
実行中 (running) 状態
正常処理または例外処理が実行されている状態。処理本体の実行が終了したら待機状態へ移る。このとき、処理本体の返り値が Deferred オブジェクトなら、その Deferred オブジェクトの継続 (_next プロパティ) を自身の継続と同じにする。そうでなければ、自身の継続たる Deferred オブジェクトを実行する (実行中状態へ移す)。

わかったこと、注意すべきこと

Deferred チェーンの図示

next(function f() {
  ...
  return next(function g() {
    ...
  });
}).
next(function h() {
  ...
});

続きを読む

[JavaScript]
[Web 関連技術]

コメント(全0件)
コメントをする


記事を書く
powered by ASAHIネット