在JavaScript获取响应忽略身体

问题描述 投票:0回答:2

我有一个要发出请求,并检查该请求是否是成功的一些代码,但它不关心响应正文:

async function doTheThing() {
  const response = await fetch(someUrl, { method: 'POST' });
  if (!response.ok) {
    throw new Error(`Request failed with status ${response.status}`);
  }
}

据我了解,响应身体还没有在这一点上下载。如果我们把它挂和不喜欢的东西跟进:

const body = await response.json();

......将请求/响应保持开放,并等到也许GC发生?如果是这样,是有办法忽略干净响应流的其余部分,而不会造成问题?

javascript http fetch-api
2个回答
1
投票

将请求/响应保持开放,并等到也许GC发生?

总之,没有。

const body = await response.json();

指示等待你的代码直到响应体被下载,它不会引发身体下载。除非有一个理由不,响应体流将下载内容,然后关闭。

你可以阅读有关在fetch spec过程。

这是可能中止已经启动后,读取请求,但不建议这样做,由于与浏览器的支持问题。见How do I cancel an HTTP fetch() request?


1
投票

你可以做一个HEAD如果它没有成为一个POST,你只是要检查,如果你会收到一个400500一系列错误

https://developers.google.com/web/ilt/pwa/working-with-the-fetch-api#example_head_requests

例如:HEAD请求通过默认获取使用GET方法,以检索一个特定资源,但也可使用其它的请求HTTP方法。

HEAD请求就像GET请求,除了响应主体是空的。当所有你想要的文件的元数据可以使用这种要求,并且希望或者需要的文件的数据运输。

如果你被卡住一个POST请求时,它控制在服务器端,您将收到任何服务器返回的,没有它指明您可以告诉服务器无法发送任何的网络标准,因此服务器都必须明确地写入允许这种行为。

如果你不小心,一旦你退出这个特定的范围,不再需要response GC将自生自灭。你并不需要await它或任何东西,但它会在后台(保存在内存中),然后扔掉GC运行时下载。

© www.soinside.com 2019 - 2024. All rights reserved.