gpt4 book ai didi

javascript - 为什么异步等待循环将其结果返回到原始数组?

转载 作者:行者123 更新时间:2023-11-30 14:15:13 25 4
gpt4 key购买 nike

我正在使用一个函数 fetchChain 调用一个对象数组,每个对象都包含 url 和其他参数来调用另一个函数 fetchData 来链接 fetch-调用。 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 })
}

我可以像这样等待所有的 promise /结果返回:

fetchChain(prepareAjax)
.then((res)=> console.log(res) )
.then(()=> console.log('done') )

那么,为什么循环将其结果返回到它接收到的数组中呢?没有特定的 return 或 then 将结果返回到原点,我无法理解这里发生的事情。

根据要求,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);
}

最佳答案

我不确定我是否正确理解了这个问题,但我想你是在问为什么函数 fetchChain 中的 array 参数包含在 中分配的信息获取数据

为此,您必须查看 passing by reference vs passing by value 的区别.在 JavaScript 中,对象和数组通过引用自动传递给函数;这意味着 array 指向与 items 相同的内存,并且当您修改 items 时,您正在修改 array

这是一个简单的例子来说明引用传递

let changeMessage = (o) => o.message = 'world';
let obj = { message: 'hello'};
changeMessage(obj);
console.log(obj.message);
// Output: world

可以通过cloning避免修改数组先说

关于javascript - 为什么异步等待循环将其结果返回到原始数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53696923/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com