最終更新日
3月20日

jOpensocialをDeferred化する「jOpensocial.Deferred」

 

posted by
kotaro

■mixiアプリの開発環境がオープンβ化されましたね。国内大手SNSからソーシャルアプリのプラットフォーム提供の第一歩が示されたわけで、今後どんな展開になるのか楽しみですが、これに先駆けること数ヶ月まえ、リクルートメディアテクノロジーラボ(MTL)主催のOpenSocialアプリ合宿という催しがあり、ご縁がありまして田中も参加させていただきました。

合宿では参加者でもあった長瀬さん作のOpenSocialAPIを扱うjQueryプラグイン「jOpensocial」が紹介されて、このプラグイン経由でAPIにアクセスする方も多かったのですけど、事前にいくらかOpenSocialアプリのJavaScriptコーディングをした経験からOpenSocialのリクエストにはいわゆるDeferredチェーンスタイルのプログラミングが有効だと思ったので、合宿中にjOpensocialのデータリクエストメソッドをjsdeferredによるDeferredチェーンでラッピングするプラグラインを作り、それを使ってOpenSocialアプリを開発していました。

合宿後長瀬さんからjOpensocialのコミット権をいただいていながら持ち前のぐうたらさから特になにもしていなかったのですけども、mixiアプリのオープンβ化にともない多くの人がOpenSocialリクエストのコールバック地獄に苦しむことになるのではと危惧し、あわててjOpensocialのDeffered化プラグイン「jOpensocial.Defereed」を公開しました。現在jOpnesocialのtrunkに含まれています。

べつにそんなたいそうなもんでもないですが、開発効率はかなり向上すると思います。

jOpensocial.Deferred

これは

jOpensocialをDeferred処理する拡張プラグインです。Deferredチェーンを利用することでOpenSocialのデータ取得リクエストのコールバック処理を簡潔に記述することができるようになります。

依存ライブラリ

使い方

jopensocialのリクエストメソッドの戻り値にjsDeferredオブジェクトが返るようになるので、nextメソッドでデータ取得後の処理を記述してください。callbackの引数は省略できますが、あったらnextの前に実行します。

jsDeferredの詳細については…あまりどこにも書いてないのですが、このへんを参照しましょう。

Deferred用メソッドを事前に定義

Deferred.define();

例1:データを取得して次の処理を行う

$.opensocial.person("owner")
.next( function(data) {
  alert(data);  // person data
});
$.opensocial.person("owner")
.next( function(data) {
  return $.opensocial.data.set("owner_data", data)
})
.next( function() {
  return $.opensocial.data.get("owner_data", "viewer")
  // ここのreturnを忘れやすいので注意。
  // nextの中でさらに待ち合わせるリクエストをreturnで返すと、
  // 次のnextはこのリクエストの後に実行されます。
})
.next( function(data) {
  alert(data); // fetch viewer appdata
})

例2:複数のデータを取得して次の処理を行う

parallel({
  source1 : $.gadget.getJSON("http://source1.com/"),
  source2 : $.gadget.getJSON("http://source2.com/")
})
.next( function(values) {
  alert(values.source1);
  alert(values.source2);
})

不具合の報告など

動作に関して問題がありましたら

にご連絡くださいませ。

コメント

ZEROFACESではコメントは認証制です。
コメントは投稿審査してから、エントリのページに反映されます。 少々お時間を頂きますが、どうかご了承ください。

グーグルは急いでクラウドにリレーショナルデータベースを載せるか

アメリカの本はデカい。ノートPCもデカい。所変われば品変わる。