А какое отношение асинхронные коллбеки имеют к коллбекам вообще?
Обычный, коллбек, как я себе это представляю, например:
hi=function(name, clb){return clb(name)}
console.log(hi("Joe", function(x){return ("Hi, "+x)}))
// Hi, Joe
вызывается ф-ция, из нее вызывается коллбек, которому передается аргумент. возврат из коллбека передается вызывающей функции, а та уже возвращает результат цепочки.
Асинхронный коллбэк
fs.readFile("tmp", "ascii", function(err, data){console.log(data)})
// data from tmp
Что между ними общего? Только то, что в обеих случаях где то там на уровне реализации, и тот и другой коллбек является фреймом вызова. Но, вроде, как я понимаю, в первом случае, этот фрейм ложится на стек, а во втором — ставится в очередь. Вызывающая функция не принимает возврат из коллбэка, и, более того, не из нее он вызывается. Это семантический нонсенс. Почему это называют коллбэками? И зачем было реализовывать асинхронные вызовы через синтаксис коллбэков, если это к коллбэкам никакого отношения не имеет? Ведь, никакого «обратного» вызова тут нет, есть отсроченный вызов.