Функция выхода после событий - PullRequest
1 голос
/ 10 июля 2011

Я хочу иметь свою собственную функцию инициализации и хочу, чтобы она выходила только после события onload, что я могу для нее сделать?

var qqq=0;
function init(){
    var requestClient= Ti.Network.createHTTPClient();
    requestClient.open('GET','https://mysite.com/api/123/id/5/friends');
        requestClient.onload = function() {
            alert('loaded');
        };
    requestClient.send();
};
init();
alert(qqq);

1 Ответ

2 голосов
/ 10 июля 2011

Ну, вы можете сделать это, сделав запрос синхронным, а не асинхронным. Это имеет неприятные побочные эффекты на пользовательский опыт просмотра, как правило, блокирует вещи во время запроса, но если вы установите третий аргумент 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, так как это делает намного лучший 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);
});

Эффективное веб-программирование заключается в том, чтобы принять его управляемый событиями характер. Я настоятельно рекомендую второй пример.

...