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

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

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

Вот так (псевдокод):

mainFunction = function() {

    attachToEvent( 'event1', function( e1 ) {

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

    }
}

console.log( mainFunction() );

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

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

Благодарность

1
Spot 19 Авг 2010 в 13:17

3 ответа

Лучший ответ

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

mainFunction = function(callback) {

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

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

    }
}

mainFunction( function (e) { console.log(e); } );
3
tarn 19 Авг 2010 в 09:25

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

0
Skilldrick 19 Авг 2010 в 09:20

Это невозможно, так как 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() );
1
jantimon 19 Авг 2010 в 09:25