Эффективный способ сделать это - всегда вызывать запросы (ограничивая максимальное количество параллельных запросов) вместо того, как вы делаете.
Используя ваш способ (проще), он всегда будет ждать все, что нужно вернуть, затем проверяет, есть ли еще данные в массиве, и рекурсивно вызывает функцию снова или возвращает все, если это сделано. Надеюсь, это поможет.
async function getSlice(data) {
let promises = []
data.map((key) => {
promises.push(fetch("myapi/"+key)
.then(res => res.json())
.then((result) => console.log(result))) //I want to store the result in an array
}
await Promise.all(promises)
}
function getAll(data, index=0, length=10) {
const allResponse = [];
return getSlice(data.slice(index,q)).then(response => {
allResponse.push(response);
newLength = length + 11 > data.length ? data.length : length + 11;
if (index + 10 > data.length) //it's over
return allResponse;
return getAll(data, index + 10, length +11);
})}
Promise.all(getAll(ids).then(arrayResponse=>console.log('dowhatever',arrayResponse))