I am using a function fetchChain called with an array of objects, each object includes the url and other parameters to call another function fetchData to chain fetch-Calls. The async/await loop returns its results to the array I fed it with, like so (simplified):
fetchChain(array){
    const loop = async (items) => {
        for (let i = 0; i < items.length; i++) {
            await fetchData(items[i])
        }
    }
    return loop(array)
    .then(()=>{ return array })
}
I can wait for all promises/results to return like so:
fetchChain(prepareAjax)
.then((res)=> console.log(res) )
.then(()=> console.log('done') )
So why does the loop returns its results to the array it got fed with? There is no specific return or then which returns the results to the origin and I can't wrap my head around about what happens here.
As requested, the fetchDacta-function:
fetchData(obj){
    // some parameters get added, like so
    obj.timeout = obj.timeout   || 10000, [...];
    const fetchRetry = async (url, options, n) => {
        try {
            return await fetch(url, options)
                .then((response)=> return response.json());
        } catch(err) {
            if (n === 1) throw err;
            return await sleep(obj.delay)
                .then(()=> fetchRetry(url, options, n - 1));
        }
    };
    return fetchRetry(url, {}, obj.retries);
}
 
    