[Titanium] JSDeferred を使って現在位置の取得を順次処理する
- 2011年02月04日 20:32
- JavaScript | TechMemo | Titanium
- JSDeferred,Titanium
Titanium で、JSDeferred を使って順次処理するサンプルです。
JSDeferredはJavaScript上の,あらゆる非同期処理を扱うライブラリです。<中略> JSDeferredは,このようなコールバックの入れ子による非同期処理を,オブジェクトの連鎖による表現に変形させてあげることで,半分同期処理のような感覚で書くことができるようにします。
バージョン -- 追記(2011/03/23)
- Titanium
- 1.5.1
- JSDeferred
- 0.4.0
Titanium 1.6.1 で動かない問題は、@Seasons さんがパッチを書いてくださいました。感謝!! パッチが公開されたらリンクします!
@hamasyou どもです^^ 0.4.0を使おうとしたところJSのコンパイルで止まってしまったのでJS初心者ということもあり色々と調べてました^^; ラベル付きブロックが使えない(正しく動作しない)みたいで、repeatの実装のところでJSコンパイルが止まってしまってました。
twitter より
サンプルコード
Titanium.include(Titanium.App.appURLToPath("app://lib/jsdeferred.js")); Deferred.define(); var currentLocation = null; (function() { var deferred = new Deferred(); Titanium.Geolocation.addEventListener("location", function(e) { currentLocation = e.coords; deferred.call(); }); return deferred; })(). next(function() { alert(currentLocation); }); alert("ここは必ずしも、alert(currentLocation)の後に呼び出されるとはかぎらない!");
alert(currentLocation) としているところに現在位置を取得した後のコードを記述することで、現在位置を取得して何か処理をするというのを順序を保証して処理することができるようになります。
ただし、next の外側の処理は非同期で進んでしまうため、必ずしも、alert(currentLocation) との順序は保たれません。
Titanium Mobile - appcelerator
Titanium で include でファイルを読むときのテクニック
Titanium.include(Titanium.App.appURLToPath("app://lib/jsdeferred.js"));
上記の様に、 app: プロトコルを使用して、appURLToPath メソッドでファイルを読み込むことで、Titanium のResources フォルダからの相対パスで書けるようになります。
- Comments: 0
- TrackBacks: 0

