Возможно ли асинхронно делать действия с элементами массива?
Воспользуйтесь промисами или либой типа async. Внезапно js поддерживает фичи функционального программирования. Из массива объектов можно создать массив промисов(или функций), а после запустить параллельное асинхронное выполнение, и получить результат, после того как все промисы/функции в массиве выполнились, Параллельный запуск осуществляется с помощью Promise.all() иди async.parallel() // псевдо код
var yourArrayFromDB = [здесь массив исходных данных, например то, что вы до этого из бд запросили];
var promiseArray = yourArrayFromDB.map( 
    (elem) => new Rromise( function (resolve, reject) {
                // функция которая обрабатывает что вам нужно асинхронно
                request.get('your.url.com', fuction( err, res) {
                     if (err) reject(err);
                     resolve(res);
                })
            }
        )
);

Promise.all(promiseArray)
    .then((resArray) => { здесь делаете что хотите с массивом результатов асинхронных функций })
    .catch(console.log);
1) AMQP, и делегирование задач.
2) Запускать дочерние процессы, разбивать массив на чанки и раздавать их сопрограммам.Первый способ:
Преимущества:
* Неограничен ни чем. Запускаете `воркеров X кол-во ядер`. Докупаете еще машину, ставите на ней ту же программу. И т.д.
* Даже если процесс упал, часть массива не потеряется, а передастся другому воркеру.
Недостатки:
* Нужно время на совершение транзакции (надуманный недостаток, так как транзакция проходим за пару миллисекунд).Второй способ:
Преимущества:
* Моментальные транзакции (ну или как ответит  родительский процесс).
Недостатки:
* Ограничен кол-во CPU.
* Не расшияем