作者:波猫小丝992 | 来源:互联网 | 2022-10-11 13:11
我有要发送到Google Cloud的数据列表。我当前的代码如下所示:
const teams = ['LFC', 'MUFC', 'CFC'];
teams.forEach(team => {
fetch({
url: URL,
method: 'PUT',
body: team
});
})
这适用于一个,team
但是如果发送多个文件并且文件更大,则会超时。我正在发送图像而不是字符串。为了解决这个问题,我需要POST
一个文件一个数据,并等待前一个文件POST
完成后再发送下一个文件。谁能建议最好的方法?
值得注意的是,我对上载的文件数量没有任何控制。
1> FZs..:
使用reduce
的,而不是forEach
与.then()
。
以下代码将存储最后一个fetch
入栈acc
(的累加器参数reduce
)的承诺,并将新的内容附加到侦听器fetch
内部then
,以确保前一个fetch
已完成:
const teams = ['LFC', 'MUFC', 'CFC'];
teams.reduce((acc,team) => {
return acc.then(()=>{
return fetch({
url: URL,
method: 'PUT',
body: team
});
})
}, Promise.resolve())
.then(()=>console.log("Everything's finished"))
.catch(err=>console.error("Something failed:",err))
//Simulate fetch:
const fetch = team => new Promise(rs => setTimeout(() => {rs();console.log(team)}, 1000))
const teams = ['LFC', 'MUFC', 'CFC'];
teams.reduce((acc, team) => {
return acc.then(() => {
return fetch({
url: URL,
method: 'PUT',
body: team
});
})
}, Promise.resolve())
.then(() => console.log("Everything's finished"))
.catch(err => console.error("Something failed:", err))