Почему постоянно лезет undefined?
На сколько я поля это фишка асинхронности !? Правильно поняли.Это получается нужно код выстраивать цепочкой из калбэков ?Необязательно. (для nodejs, понятно, своя специфика, но общие принципы такие же, естественно).
Да, именно так, на момент вызова console.log колбэк еще не отработал. Добро пожаловать в callback hell. Альтернативы:
 - промисы, позволяют уменьшить вложенность колбэков
 - корутины - сложно но можно писать асинхронный код в синхронном стиле, повторюсь это сложно
 - async/await - еще не запилили в js.