Гораздо удобнее (и правильнее) писать на async в таком стиле.
var async = require('async');
async.auto({
'Aitems': function(callback) { // делаем первый запрос к базе
db.model('items').find({}, function (err, data) {
callback(err, data); // данные получены, возвращаемся
});
},
'Busers': function(callback) { // параллельно делаем второй запрос к базе
db.model('users').find({}, function (err, data) {
callback(err, data); // данные получены, возвращаемся
});
}
},
function(err, results) {
if (err){return console.error(err);} // если будут ошибки - их напишем.
// ошибок нет, нам доступны результаты каждой операции
console.dir({ items: results['Aitems'], users: results['Busers'] });
});
У вас есть обработка ошибок, плюс вы уверены, что ваши переменные items_list и user_list не будут изменены где-то ещё, во время обработки запросов. Некрасиво выносить переменные за функцию, которая их изменяет.