Javascript 删除获取API默认超时
我正在使用Google Chrome或Mozilla Firefox的本机抓取功能向我的服务器发送查询:Javascript 删除获取API默认超时,javascript,google-chrome,firefox,fetch-api,Javascript,Google Chrome,Firefox,Fetch Api,我正在使用Google Chrome或Mozilla Firefox的本机抓取功能向我的服务器发送查询: fetch(url, { method: 'POST', body: formData, credentials: 'include' }) 我设置了一个服务器,在3分钟后发送响应,并意识到两个浏览器只需等待2分钟。Firefox在失败之前再次发送请求 有没有办法定义大于2分钟(比如无限)的超时时间?就我阅读的关于MDN的fetch()文档而言,它没有办法指定超时时间 如果您使
fetch(url, {
method: 'POST',
body: formData,
credentials: 'include'
})
我设置了一个服务器,在3分钟后发送响应,并意识到两个浏览器只需等待2分钟。Firefox在失败之前再次发送请求
有没有办法定义大于2分钟(比如无限)的超时时间?就我阅读的关于MDN的fetch()文档而言,它没有办法指定超时时间
如果您使用的是nodejs,则可以使用request或axios模块。
或者您可以使用XMLHttpRequest(浏览器中的纯javascript)
欲了解更多信息,我求助于
async function fetchJSON(url: string, data: any = {}, method: string = "POST"): Promise<any> {
const start = new Date().getSeconds();
while (new Date().getSeconds() - start < 10) {
try {
const res = await fetch(url, {
method,
headers: {
"Content-Type": "application/json; charset=utf-8"
},
body: JSON.stringify(data)
});
try {
return await res.json();
} catch (e) {
if (res.status < 400) {
return res.status;
} else {
throw e;
}
}
} catch (e) {
await new Promise((resolve) => {
setTimeout(resolve, 1000);
})
}
}
}
异步函数fetchJSON(url:string,data:any={},method:string=“POST”):Promise{
const start=new Date().getSeconds();
while(新日期().getSeconds()-开始<10){
试一试{
const res=等待获取(url{
方法,,
标题:{
“内容类型”:“应用程序/json;字符集=utf-8”
},
正文:JSON.stringify(数据)
});
试一试{
return wait res.json();
}捕获(e){
如果(分辨率状态<400){
返回res.status;
}否则{
投掷e;
}
}
}捕获(e){
等待新的承诺((决心)=>{
设置超时(解析,1000);
})
}
}
}
也就是说,超时是10秒。要使超时“无限”,我使用以下方法:
fetch (serverUrl)
.then
( resp => resp.json()
)
.then
( json => $cback (json)
)
.catch
( e => $cback (e)
);
“$cback”是范围内可见的回调函数
它检测它的第一个参数是否为
错误。如果是这样,它将对fetch()进行新调用。
如果未检测到错误,则使用
无论它的意图是什么,然后
打一个新的电话去取回
这在FireFox上似乎效果很好。取回
不是超时,这是我想要的。不幸的是
在Chrome上,fetch()总是在大约2分钟内超时
换句话说,这会导致catch子句着火
超时被视为错误。但我明白了
我在Chrome上的真正问题是
虽然我捕捉到了错误,但它仍然会产生错误
日志中有关无响应请求的错误条目。
因此,如果用户在离开之前保持浏览器打开
到午餐时,他们会在自己的电脑中看到许多错误信息
浏览器日志(如果他们愿意看的话)恐怕
错误的数量将导致它们
“抓狂”。请看,我理解@sideshowbarker,但所有这些描述都说明了如何减少超时。如果我的获取承诺在2分钟后被拒绝,我无法手动设置3分钟超时。在我看来,XMLHttpRequest timeout在FireFox上起作用。您可以将其设置为任何值,如果不设置,默认值是它将永远等待。很好,不过我更喜欢使用fetch()。但无论我做什么,Chrome似乎总是在2分钟内超时。