我正在使用一个函数 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);
}
1 回答
我'm not sure if I understand the question correctly, but I think you'问为什么函数
fetchChain
中的array
参数包含fetchData
中指定的信息 .为此你必须看看passing by reference vs passing by value的区别 . 在JavaScript中,对象和数组通过引用自动传递给函数;这意味着
array
指向与items
相同的内存,当您修改items
时,您正在修改array
.这是一个简单的例子来说明通过引用传递
您可以避免首先通过cloning修改数组