2016-09-28 4 views
-1

Итак, я точно понимаю функции обратного вызова. Например, я полностью понимаю:Анонимные функции обратного вызова

function finalGuy(x) { 
    alert("Final Number: " + x); 
} 

function secondGuy(x, callback) { 
    x = x - Math.sqrt(x); 
    callback(x); 
} 

function firstGuy(callback) { 
    var x = parseInt(prompt("Enter a number")); 
    x *= x; 
    secondGuy(x, callback); 
} 


firstGuy(finalGuy); 

Однако, столкнувшись с чем-то вроде этого я не могу понять это.

a(function() { 
    b(function() { 
     c() 
    }) 
}); 

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

+0

, пожалуйста, добавьте желаемый результат. –

+0

@NinaScholz Мне хотелось, чтобы результат второго блока имитировал исход первого блока или что-то подобное. –

+0

Трудно сказать, что этот код означает без знания функций 'a',' b' и 'c'. –

ответ

2

Эти два дают тот же результат

1.

function acceptCallback(callback) { 
    callback(); 
} 

function callback() { 
    console.log('callback invoked'); 
} 

acceptCallback(callback); // => 'callback invoked' 

2.

function acceptCallback(callback) { 
    callback(); 
} 

acceptCallback(function() { 
    console.log('callback invoked'); 
}); 

В первом примере вы передаете объявление функции, во втором примере вы передаете анонимную функцию

3. Выполнение операций в рамках обратного вызова не будет передан другому обратного вызова, так называемый «обратный вызов ад»

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

function first(callback) { 
    callback('from first'); 
} 

function second(callback) { 
    callback('from second'); 
} 

function third(callback) { 
    callback('from third'); 
} 

function fourth(n, callback) { 
    callback(n * 10); 
} 

first(function(fromFirst) { 
    var a = 5; 
    console.log(fromFirst); // 'from first' 
    second(function(fromSecond) { 
    console.log(fromSecond); // 'from second' 
    third(function(fromThird) { 
     console.log(fromThird); // 'from third' 
     var b = a + 5; // 10 
     fourth(b, function(fromFouth) { 
     console.log(a, b, fromFourth); // 5, 10, 100 
     }) 
    }); 
    }); 
}); 
+0

Итак, как правильно передать результат от одной анонимной функции ко второй анонимной функции? Я не знаю, что я делаю неправильно, но когда я пытаюсь использовать анонимные функции для той же операции, что и в моем исходном блоке, я либо получаю undefined, NaN, либо просто предупреждает мою функцию. –

+0

Например, в моем первом примере у меня есть функция, которая выполняет некоторые операции над числом, передает ее второй функции, которая выполняет еще несколько операций над ней, передает ее третьей, которая отображает ее. Можете ли вы изменить свой пример анонимными функциями, чтобы показать, как я могу это сделать? –

+0

@ GD добавлен другой пример. В общем, вы хотите, чтобы в любом случае не писать такой код. выполните поиск «callback hell», чтобы понять, почему. –

Смежные вопросы