Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 删除获取API默认超时_Javascript_Google Chrome_Firefox_Fetch Api - Fatal编程技术网

Javascript 删除获取API默认超时

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()文档而言,它没有办法指定超时时间 如果您使

我正在使用Google Chrome或Mozilla Firefox的本机抓取功能向我的服务器发送查询:

fetch(url, {
  method: 'POST',
  body: formData,
  credentials: 'include'
})
我设置了一个服务器,在3分钟后发送响应,并意识到两个浏览器只需等待2分钟。Firefox在失败之前再次发送请求

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

就我阅读的关于MDN的fetch()文档而言,它没有办法指定超时时间

如果您使用的是nodejs,则可以使用requestaxios模块。 或者您可以使用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分钟内超时。