есть 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-гуру ошибка в примере (скорее я недопонимаю, но ведь не работает же реально, елки-палки). Потому и спрашиваю.
Как переписать данный пример из лекции, чтоб работал (без использования промисов)?