Возможны ли в JS вложенные колбэки в колбэках?

есть JS-код в популярном примере организации асинхронного вызова функций, вот скриншот его (на 21-й минуте 21 секунд): Вот только этот код этого популярного примера в реальности не работает, вот:
 
var fcb = function(i, index, arr){console.log(i,index, arr)};
 
 function  asyncForEach (array,cb) {
	  console.log("get"+array);
	array.forEach(function(){ setTimeout (cb, 0);})
}

asyncForEach([1,2,3,4,5,77], fcb); //undefined undefined undefined 

//хотя код выше должен был бы работать так же, как и синхронный вариант:
 [1,2,3,4,5,77].forEach(function(i, index, arr){console.log(i,index, arr )})
habrahabr утверждает: "вложенные колбэки в колбэках, как мы знаем, становятся непригодными" (и откуда это правило, может на спецификацию есть ссылка под рукой?). Версия моя: не работает код выше, потому что cb в setTimeout (cb, 0) является "вложенным колбэком в колбэке"? Ну не может же быть в такой популярной лекции JS-гуру ошибка в примере (скорее я недопонимаю, но ведь не работает же реально, елки-палки). Потому и спрашиваю. Как переписать данный пример из лекции, чтоб работал (без использования промисов)?

Комментарии: 1

Александр Мальцев
Александр Мальцев
При написании примера допущены следующие ошибки:
— не указан текущий обрабатываемый элемент для метода forEach();
— в setTimeout для функции cb не передан аргумент i.

function asyncForEach(array,cb){
    array.forEach(function(i){
        setTimeout(cb,0,i);
    })
};
asyncForEach([1,2,3,4], function(i){
    console.log(i);
});