好吧,您可以通过使请求同步而不是异步来做到这一点。这对用户的浏览体验有不愉快的副作用,往往会在请求期间锁定东西,但是如果您将open
的第三个参数设置为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
处理程序中调用的回调,因为这会带来更好的用户体验:
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);
});
有效的网络编程就是要接受它的事件驱动性质。我强烈推荐第二个例子。