Home > JavaScript Archive

JavaScript Archive

[Titanium] JSDeferred を使って現在位置の取得を順次処理する

Titanium で、JSDeferred を使って順次処理するサンプルです。

JSDeferredはJavaScript上の,あらゆる非同期処理を扱うライブラリです。<中略> JSDeferredは,このようなコールバックの入れ子による非同期処理を,オブジェクトの連鎖による表現に変形させてあげることで,半分同期処理のような感覚で書くことができるようにします。

JSDeferredで,面倒な非同期処理とサヨナラ - gihyo.jp

バージョン -- 追記(2011/03/23)

Titanium
1.5.1
JSDeferred
0.4.0

Titanium 1.6.1 で動かない問題は、@Seasons さんがパッチを書いてくださいました。感謝!! パッチが公開されたらリンクします!

Seasons.NET

@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

JSDeferred

Titanium で include でファイルを読むときのテクニック

Titanium.include(Titanium.App.appURLToPath("app://lib/jsdeferred.js"));

上記の様に、 app: プロトコルを使用して、appURLToPath メソッドでファイルを読み込むことで、Titanium のResources フォルダからの相対パスで書けるようになります。

Index of all entries

Home > JavaScript Archive

Search
Feeds
access

access counter

Return to page top