Reduce — полезная функция. Но холивар про reduce vs цыкл будет вечным. Как бы единственным недостатком что нельзя reduce прервать. Ну и поменьший недостаток что reduce не асинхронный.
И вот такое работать не будет.
result = await arr.reduce(async ()=> await ...);
....
return result;
Хм… а может Вы просто его готовить не умеете? Динамическая типизация это не только изьян, но и преимущество, прототипное наследованние это экономия памяти, если бы js не нужно было бы тащить легаси первых версий, он был бы еще быстрей и лучше.
Ну как для меня, в этой статье лучше написано, более доходчиво. https://habr.com/ru/articles/715882/
И вот такое работать не будет.
А так довольно лаконично можно писать.