Jquery вызывает функцию обратного вызова в пользовательской функции - PullRequest
9 голосов
/ 23 октября 2011

У меня есть пользовательская функция, и я хочу добавить к ней функцию обратного вызова, я просмотрел другие вопросы, но не смог найти ответ на свой вопрос.Так что в основном это выглядит так:

function myfunction() {
 // something 
}

И у меня есть другая функция, которую я хочу вызвать как обратный вызов, в конце концов, я хочу вызвать myfunction так:

myfunction(callback());

ИтакМожет кто-нибудь сказать, пожалуйста, как это сделать?

Ответы [ 3 ]

20 голосов
/ 23 октября 2011

Вы бы назвали это так (передав функцию обратного вызова в качестве аргумента):

 myfunction(myCallbackFn);

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

Вы бы определили свою функцию и затем вызвали в ней функцию обратного вызова следующим образом:

function myfunction(cb) {
    cb(arg1, arg2);
}

Обратите внимание, что существует множество методов фактического вызова функции обратного вызова из вашей пользовательской функции. Если вам просто нужно вызвать его как обычно и не беспокоиться о аргументе this, вы можете просто использовать:

cb();

Если вы хотите установить аргумент this на что-то, вы можете использовать это:

cb.call(thisArg, arg1, arg2);

Если вы хотите передать ваши текущие аргументы или передать массив аргументов и установить аргумент this, вы должны использовать это:

cb.apply(thisArg, argArray);

Ссылки на .call() и .apply().


Ваш текущий код содержит ошибку javascript в этой области:

test(rand_gyumolcs, link, callback){
    callback();
}; 

Это не разрешенный Javascript. Я не знаю, что вы пытаетесь сделать, но это выглядит как половина объявления функции и половина вызова функции. Если вы просто хотите вызвать тестовую функцию, вы просто должны использовать это:

test(rand_gyumolcs, link, callback);

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

7 голосов
/ 06 июня 2013

Вот пример с обратным вызовом с возвращаемым значением, которое также принимает входные параметры:

function test2(arg1, arg2, callback) {
  var result = callback(arg1, arg2);

  alert('arg1=' + arg1 + ', arg2=' + arg2 + ', result=' + result);
}

test2(1, 2, function(a, b) { return a + b; });
4 голосов
/ 23 октября 2011
function myfunction(callback) {
 // something

 callback();
}

myfunction(callback);

заметьте, я не вызываю обратный вызов, а просто передаю его как ссылку на функцию к моей функции.Затем я вызываю его в функции в конце или там, где вы хотите это сделать.

...