我有一些代码想要发出请求并检查请求是否成功,但是它并不关心响应主体:
async function doTheThing() {
const response = await fetch(someUrl, { method: 'POST' });
if (!response.ok) {
throw new Error(`Request failed with status ${response.status}`);
}
}
据我了解,响应 body 目前尚未下载。如果我们将其挂起,并且不要继续执行以下操作:
const body = await response.json();
...请求/响应是否会保持打开状态并等待,直到可能发生GC?如果是这样,是否有一种方法可以完全忽略响应流的其余部分而不会引起问题?
答案 0 :(得分:1)
请求/响应是否会保持打开状态并等待直到可能发生GC?
简而言之,不是。
const body = await response.json();
指示您的代码等待,直到下载了响应主体,它不会触发主体下载。除非有原因,否则响应主体流将下载内容然后关闭。
您可以在fetch spec中了解该过程。
启动获取请求后,可以中止获取请求,但是由于浏览器支持方面的问题,不建议这样做。参见How do I cancel an HTTP fetch() request?
答案 1 :(得分:1)
如果不必一定是HEAD
,您可以只做一个POST
,而您只想检查是否会收到400
或500
系列错误
https://developers.google.com/web/ilt/pwa/working-with-the-fetch-api#example_head_requests
示例:HEAD请求默认情况下,fetch使用GET方法,该方法 检索特定资源,但是其他请求HTTP方法也可以 被使用。
HEAD请求就像GET请求一样,除了主体 响应为空。您可以在需要时使用这种请求 文件的元数据,并且您希望或需要将文件的数据 运输。
如果您遇到POST
请求,则该请求在服务器端受到控制,并且您将收到服务器返回的任何内容,没有网络标准规定您可以告诉服务器不要发送任何内容,因此服务器必须明确编写以允许这种行为。
如果您不在乎,则退出该特定范围后,GC将继续其课程,并且不再需要response
。您不需要await
或其他任何东西,但是它将在后台下载(保存在内存中),然后在GC运行时被丢弃。