TitaniumのaddEventListenerについて再び
TitaniumのaddEventListenerで同じイベントに登録した処理は順番に同期実行される。
Firefoxなどのブラウザ(ただしIE除く。IE9は不明)の実装でも同じ挙動になるので、これはこの通り動くと期待して間違いない挙動のようだ。
ただし処理内に別の非同期処理がある場合、その処理は非同期で実行され、次の順番の処理がその処理を待たずに実行される。
app.js
検証のためのサンプルコード。
Ti.App.addEventListener("custom", function(){ Ti.API.info("1st")});
Ti.App.addEventListener("custom", function(){
a = new Date()
while ((new Date()) - a < 3000) {
// 時間のかかる処理でも待ってもらえる
}
Ti.API.info("2nd with sleep 3sec")
});
Ti.App.addEventListener("custom", function(){
var xhr = Titanium.Network.createHTTPClient();
xhr.open('GET','http://www.google.com/');
xhr.onload = function(){
// 非同期処理になるので4thに待ってもらえない
Ti.API.info("3rd with async http")
};
xhr.send();
});
Ti.App.addEventListener("custom", function(){ Ti.API.info("4th")});
Ti.App.fireEvent("custom")
// fireEventは非同期なので以下の処理が先に走る
Ti.API.info("5th after fireEvent")
実行結果
[INFO] 5th after fireEvent [INFO] 1st [INFO] 2nd with sleep 3sec [INFO] 4th [INFO] 3rd with async http
この挙動はイベントのテストに役立ちそうだ。
