Как правильно написать асинхронный код в условных операторах?
Проще всего будет использовать модуль async и его метод waterfall.
Проще всего не мучиться и использовать async / await из ES7, правда пока только с препроцессором, пример, ваш конкретный случай.