Чтобы добавить то, что сказал Дэвин, вы обычно выполняете асинхронные операции с обратными вызовами.Проблема с вашим кодом заключается в том, что если у вас n разных альбомов, у вас есть n различных операций запроса, выполняемых одновременно , но у вас нет возможности узнать, когда они все финиш.
Я не парень Node.js, так что, возможно, есть утилиты, чтобы справиться с этим, но с ванильным JavaScript, вот как я бы справился с такой вещью с минимальными изменениями вваш код.
Вот несколько псевдо-javascript для краткости
Album.all = function(callback){
request( "_all_docs", function(albums){
var albumsLeft = albums.length;
var results = [];
albums.forEach( function(album_id){
request( "albums/" + album_id, function(album){
results.push(album);
albumsLeft -= 1;
if( albumsLeft === 0){
callback(results);
}
});
});
});
};