вообще теория нам говорит, что функция, объявленная с ключевым словом async, возвращает промис.
соответственно справедливы оба случая: в первом - это возвращающий промис колбэк (сам колбек объявлен с async), во втором - это синхронный колбек, который возвращает результат вызова фукнции foo (и тут уже сама функция foo объявлена с async, а значит она возвращает промис, а значит и колбэк тоже вернет промис).
если при прочих равных вы все равно через Promise.all ожидаете резолва всех этих промисов, то в чем прикол городить async-await конструкции в методе массива?)
если вы абстрагируетесь от того, что эта функция foo возвращает - то мы вернемся к тому что map просто преобразует один массив в другой, это гораздо проще понять тогда
и да, await не дожидается выполнения колбека для текущего элемента массива