Проблема в том, что вы думаете об этом коде в терминах синхронной операции, то есть при выполнении строки за строкой.
Но в действительности следующая строка обращается к db, поэтому возвращается обратный вызов
User.findById (userids, function (err, getnames)