【发布时间】:2020-10-14 03:15:30
【问题描述】:
如果我这样做:
fetch(someUrl)
.then(logResponse)
.catch(logError);
我得到速率限制(即响应有 429 代码),我不进入then(我可以看到logResponse 从未运行)。
相反,我直接进入 catch 块,它只是传递了一个非常简单的错误对象,其中包含名称/类型/消息,没有其他内容 (TypeError: Failed to fetch)。
如何访问返回的response(例如,以便我可以通过编程方式识别429)?
【问题讨论】:
-
浏览器登录 devtools 控制台有哪些错误信息?
-
访问从原点 'someUrl' 在 'someUrl' 获取已被 CORS 策略阻止:否 'Access-Control-Allow-Origin ' 请求的资源上存在标头。如果不透明的响应满足您的需求,请将请求的模式设置为“no-cors”以获取禁用 CORS 的资源。
-
好的,所以如果 429 错误缺少 Access-Control-Allow-Origin 响应标头,那么提取将失败,并且您的代码将命中
catch块。但是,如果 429 错误具有 Access-Control-Allow-Origin 响应标头,则提取不应失败,您应该能够以编程方式识别 429 错误并进行处理。 -
是的,它确实缺少 CORS 标头。但这是否意味着在没有 CORS 标头的 429 上,Javascript 不可能 访问
response?因为所有catch块获得通过的是(非常少的)Error对象,而不是response。如果是这样,那绝对可以作为这个问题的有效答案。
标签: javascript fetch-api