Как получить данные возврата из обработчика событий? - PullRequest
1 голос
/ 19 августа 2010

Хорошо, это очень простой вопрос.Я на самом деле на 90% уверен, что знаю ответ, но поздний час заставляет меня полностью найти его.Я искал его в SO и Google, но безуспешно.

Как получить данные возврата из функции обработчика событий?

У меня есть несколько гнезд обработчиков событий, и мне нужно получитьрезультат от самого глубокого к главному выходу.

Примерно так (псевдокод):

mainFunction = function() {

    attachToEvent( 'event1', function( e1 ) {

        e.attachToEvent( 'event2', function( e2 ) {
            return e2.status;
        }

    }
}

console.log( mainFunction() );

Каков правильный шаблон для вывода этих возвращаемых данных (e2.status) на консоль?

Еще раз прошу прощения за простоту этого вопроса.

Спасибо

Ответы [ 3 ]

3 голосов
/ 19 августа 2010

Вы можете просто войти в обработчик событий или передать обратный вызов в основную функцию.

mainFunction = function(callback) {

    arg.attachToEvent( 'event1', function( e1 ) {

        e.attachToEvent( 'event2', function( e2 ) {
            callback(e2.status);
        }

    }
}

mainFunction( function (e) { console.log(e); } );
1 голос
/ 19 августа 2010

Это невозможно, поскольку console.log мог быть выполнен до того, как было запущено ваше событие.

См. Этот пример (вместо события используется таймер)

var x = 1;

setTimeout( function(){    
   x = 2;    
},1000)

console.log(x);// x = 1

Изменяя область действия x, вы можете использовать console.log.Однако, как вы можете видеть, в большинстве случаев это не поможет

К вашему вопросу:

mainFunction = function() {

    var returnValue;

    attachToEvent( 'event1', function( e1 ) {

        e.attachToEvent( 'event2', function( e2 ) {
            returnValue = e2.status;
        }

    }

    return returnValue;
}

console.log( mainFunction() );
0 голосов
/ 19 августа 2010

Вместо return e2.status вы не можете просто написать console.log(e2.status)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...