删除Fetch API默认超时

时间:2018-05-22 14:28:51

标签: javascript google-chrome firefox fetch-api

我使用Google Chrome或Mozilla Firefox的原生提取功能向我的服务器发送查询:

fetch(url, {
  method: 'POST',
  body: formData,
  credentials: 'include'
})

我设置服务器在3分钟后发送响应,并意识到两个浏览器只等待2分钟。 Firefox在失败之前再次重新发送请求。

有没有办法定义超过2分钟的超时(比如无限)?

3 个答案:

答案 0 :(得分:1)

就我在MDN上阅读fetch()的文档而言,它无法指定超时。

如果您使用的是nodejs,则可以使用请求 axios 模块。 或者你可以使用 XMLHttpRequest (浏览器中的普通javascript)。

了解更多信息HTTP request timeouts in 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上对我来说真正的问题是 虽然我发现了错误,但仍然会产生 有关无响应请求的日志中的错误条目。 因此,如果用户在打开浏览器前保持打开状态 午餐,他们会在他们的错误消息中看到很多 浏览器日志(如果他们愿意看的话),恐怕 错误的数量将导致它们 “吓坏了”。