Как использовать функцию обратного вызова в функциях JavaScript - PullRequest
4 голосов
/ 13 марта 2011

Я очень плохо знаком с JavaScript, и мне нужно использовать функцию обратного вызова в моей функции сценария Java.Я не знаю, как использовать функцию обратного вызова.Ниже приведен мой код:

function SelectedFeature() { 
 // Here is my code  call_Method1(); 
 call_Method2(); 
 } 

Проблема в вышеприведенной функции заключается в том, что call_method2() начинает выполняться до того, как call_Method1() завершит свое выполнение.Чтобы решить эту проблему, кто-то сказал мне использовать функцию обратного вызова.Теперь, как я могу использовать функцию обратного вызова в моей функции SelectedFeature()?Пожалуйста, объясните, используя пример кода.

Я делаю асинхронный запрос в call_method1().Мне нужно call_Method2() должен быть вызван после завершения выполнения call_method1().Но в моем случае call_method2() вызывает до того, как call_method1() завершит свое выполнение.Теперь, как я могу это исправить?

Ответы [ 3 ]

7 голосов
/ 13 марта 2011

Необходимо выполнить рефакторинг call_method1(), чтобы принять и выполнить обратный вызов после его завершения:

call_method1(call_method2);

и

function call_method1(callback) {
    // ...
    // do asynchronous stuff, when the response is processed, call
    if(typeof callback === 'function') {
        callback();
    }
    // ...
}

Функции являются гражданами первого класса, поэтому, обращаясь ких по имени, вы можете передавать их как любое другое значение.

Мы могли бы помочь лучше, если вы отправите код для call_method1.

0 голосов
/ 31 января 2014

Феликс уже ответил на вопрос выше. Вдохновленный его ответом и проблемой, с которой я столкнулся в текущем проекте, я написал небольшую суть, в которой есть класс, который добавляет немного дополнительной безопасности.

Подводя итог, вы передаете функцию обратного вызова так же, как вы передаете переменную. Затем приемник активирует его как функцию.

myCoolFunction: function( data ) {
  // Do some thing with response
}

$.get( '/some/cool/url', myCoolFunction );

В приведенном выше примере $.get перезванивает myCoolFunction с параметром data при получении данных

Что произойдет, если myCoolFunciton является переменной. Ну, это зависит от того, как приемник обрабатывает ввод.

Просто чтобы быть осторожным, у меня есть класс CoffeeScript (и его компиляция JavaScript), который будет выполнять некоторые проверки безопасности.

Он ничего не делает магическим, проверяет, является ли его функцией, и возвращает, если не возвращает пустую функцию, чтобы уменьшить вероятность ошибки JS. https://gist.github.com/ziyan-junaideen/8717925

0 голосов
/ 13 марта 2011

Что вы используете для асинхронного вызова? Вы сами это написали или используете библиотеку типа JQuery?

Вы можете просто поместить bool, чтобы сказать «работает», что вы установили в true, когда метод 1 запускается, и обратно в false, когда он заканчивается. тогда вы могли бы подождать method2, пока работа верна.

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