Как передать обратный вызов в качестве параметра в другую функцию
Я новичок в функциях 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();
Ответ 3
Если вы google для javascript callback function example
, вы получите Лучшее понимание функций обратного вызова в JavaScript
Вот как сделать функцию обратного вызова:
function f() {
alert('f was called!');
}
function callFunction(func) {
func();
}
callFunction(f);
Ответ 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");
});