我使用Google Chrome或Mozilla Firefox的原生提取功能向我的服务器发送查询:
fetch(url, {
method: 'POST',
body: formData,
credentials: 'include'
})
我设置服务器在3分钟后发送响应,并意识到两个浏览器只等待2分钟。 Firefox在失败之前再次重新发送请求。
有没有办法定义超过2分钟的超时(比如无限)?
答案 0 :(得分:1)
就我在MDN上阅读fetch()的文档而言,它无法指定超时。
如果您使用的是nodejs,则可以使用请求或 axios 模块。 或者你可以使用 XMLHttpRequest (浏览器中的普通javascript)。
答案 1 :(得分:0)
我诉诸
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);
})
}
}
}
即超时为10秒。
答案 2 :(得分:0)
要使超时为“无限”,我使用以下方法:
How many numbers are there?5
Enter number:1
Enter number:2
Enter number:3
Enter number:4
Enter number:5
Average: 3.0
'$ cback'是范围内可见的回调函数 它检测它的第一个参数是否是instanceof 错误。如果是这样,它将对fetch()进行新的调用。 如果未检测到错误,则使用 做出任何预期的响应,然后 发出新的调用以获取。
这似乎在FireFox上效果很好。提取确实 不是超时,这就是我想要的。不幸 在Chrome fetch()上总是在约2分钟内超时 换句话说,这导致接发子弹开火 超时被视为错误。但是我抓住了。
在Chrome上对我来说真正的问题是 虽然我发现了错误,但仍然会产生 有关无响应请求的日志中的错误条目。 因此,如果用户在打开浏览器前保持打开状态 午餐,他们会在他们的错误消息中看到很多 浏览器日志(如果他们愿意看的话),恐怕 错误的数量将导致它们 “吓坏了”。