Как сделать цепочку из десятков запросов без рекурсии?
проще заюзать Promise, у него есть метод Promise.all, который передаст управление в следующий then только тогда, как отработают все N-вызовов к API
Вам не нужна рекурсия, достаточно обойтись циклом.
Пример:const data = [1, 2, 3, 4, 5, 6, 7, 8, 9];
const chunks = 3;

function delay(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}

let promise = Promise.resolve();

for (let i = 0; i < data.length; i += chunks) {
  const slice = data.slice(i, i + chunks);

  promise = promise.then(() => Promise.all(
    slice.map(() => console.log(i))
  ));
}

promise.then(() => console.log('all done'));