Проблема заключалась в переменной request. Она была объявлена глобально и на момент вызовов функции callback, имела значение которое её было присвоено в последней итерации цикла.
Решение: надо прокинуть для каждого вызова функции callback свое значение переменной request, для этого можно обернуть код цикла в немедленно вызываемую функцию, тем самым сохранив в замыкание уникальное значение для каждого вызова функции callback.
Более правильный способ для массива requests вызвать метод forEach, который по сути делает тоже самое(для каждого элемента массива вызывает функцию).
В javascript функции являются объектами. Как еще один вариант можно свойству callback.request присвоить значение request[i] и уже внутри функции обращаться к нему.
Для того чтобы избежать таких ошибок в будущем, важно понимать асинхронную природу кода и механизм работы областей видимости. Стараться избегать глобальных переменных и изолировать код в модули.