そうですね、リクエストを非同期ではなく同期にすることで、それを行うことができます。これは、ユーザーのブラウジングエクスペリエンスに不快な副作用をもたらし、リクエスト中に物事をロックする傾向がありますが、open
の3番目の引数をfalse
に設定すると、非同期ではなく同期になります。
var qqq=0;
function init(){
var requestClient= Ti.Network.createHTTPClient();
requestClient.open('GET','https://mysite.com/api/123/id/5/friends', false);
// Here------^
requestClient.onload = function() {
alert('loaded');
};
requestClient.send();
};
init();
alert(qqq);
同期リクエストは、ネットワーク操作が完了するまで、ページでのJavaScriptの実行(少なくとも、JavaScriptだけでなく多くのブラウザーで)を急停止させます。
ただし、通常はinit
、ハンドラー内から呼び出すコールバックを受け入れるようにします。onload
これにより、UXが大幅に向上します。
var qqq=0;
function init(callback){ // <== Accept a callback
var requestClient= Ti.Network.createHTTPClient();
requestClient.open('GET','https://mysite.com/api/123/id/5/friends');
requestClient.onload = function() {
alert('loaded');
callback(); // <== Call the callback
};
requestClient.send();
};
init(function() { // <== Pass the callback into `init`
alert(qqq);
});
効果的なWebプログラミングとは、イベント駆動型の性質を取り入れることです。2番目の例を強くお勧めします。