Я использую функцию fetchChain
, вызываемую с массивом объектов, каждый объект включает URL-адрес и другие параметры для вызова другой функции fetchData
, чтобы связать fetch
-Calls.Цикл async / await возвращает свои результаты в массив, которым я его кормил, вот так (упрощенно):
fetchChain(array){
const loop = async (items) => {
for (let i = 0; i < items.length; i++) {
await fetchData(items[i])
}
}
return loop(array)
.then(()=>{ return array })
}
Я могу ждать, пока все обещания / результаты вернутся так:
fetchChain(prepareAjax)
.then((res)=> console.log(res) )
.then(()=> console.log('done') )
Так почему же цикл возвращает результаты в массив, которым он был загружен?Нет конкретного возврата или затем, который возвращает результаты к источнику, и я не могу обдумать, что здесь происходит.
По запросу, функция fetchDacta
:
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);
}