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

Я новичок в функциях ajax и callback, пожалуйста, простите меня, если я понял, что все не так.

Проблема: Могу ли я отправить функцию callbackfunction в качестве параметра другой функции, которая будет выполнять обратный вызов?

function firstFunction(){
    //some code

    //a callback function is written for $.post() to execute
    secondFunction("var1","var2",callbackfunction);
}

function secondFunction(var1, var2, callbackfunction) {
    params={}
    if (event != null) params = event + '&' + $(form).serialize();

    // $.post() will execute the callback function
    $.post(form.action,params, callbackfunction);
}

Ответ 1

Ага. Ссылки на функции - это как любая другая ссылка на объект, вы можете передать их вашему сердцу.

Вот более конкретный пример:

function foo() {
    console.log("Hello from foo!");
}

function caller(f) {
    // Call the given function
    f();
}

function indirectCaller(f) {
    // Call 'caller', who will in turn call 'f'
    caller(f);
}

// Do it
indirectCaller(foo); // alerts "Hello from foo!"

Ответ 2

Кроме того, может быть просто:

if( typeof foo == "function" )
    foo();

Ответ 4

Да, конечно, функция - это объекты и может быть передана, но, конечно же, вы должны объявить ее:

function firstFunction(){
    //some code
    var callbackfunction = function(data){
       //do something with the data returned from the ajax request
     }
    //a callback function is written for $.post() to execute
    secondFunction("var1","var2",callbackfunction);
}

Интересно, что ваша функция обратного вызова также имеет доступ ко каждой переменной, которую вы могли бы объявить внутри firstFunction() (переменные в javascript имеют локальную область).

Ответ 5

Пример для CoffeeScript:

test = (str, callback) ->
  data = "Input values"
  $.ajax
    type: "post"
    url: "http://www.mydomain.com/ajaxscript"
    data: data
    success: callback

test (data, textStatus, xhr) ->
  alert data + "\t" + textStatus

Ответ 6

Вы можете использовать JavaScript CallBak следующим образом:

var a;

function function1(callback) {
 console.log("First comeplete");
 a = "Some value";
 callback();
}
function function2(){
 console.log("Second comeplete:", a);
}


function1(function2);

Или Java Script Promise:

let promise = new Promise(function(resolve, reject) { 
  // do function1 job
  let a = "Your assign value"
  resolve(a);
});

promise.then(             

function(a) {
 // do function2 job with function1 return value;
 console.log("Second comeplete:", a);
},
function(error) { 
 console.log("Error found");
});