代码之家  ›  专栏  ›  技术社区  ›  Jacob

忽略javascript获取响应中的主体

  •  0
  • Jacob  · 技术社区  · 7 年前

    我有一些代码想要发出请求并检查请求是否成功,但它不关心响应主体:

    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?如果是这样,是否有一种方法可以干净地忽略响应流的其余部分而不会引起问题?

    2 回复  |  直到 7 年前
        1
  •  1
  •   rh16    7 年前

    请求/响应是否将保持打开状态并等待GC发生?

    简而言之,没有。

    const body = await response.json();
    

    指示代码在下载响应正文之前等待,它不会触发正文下载。除非有理由不这样做,否则响应主体流将下载内容,然后关闭。

    您可以在 fetch spec .

    可以在启动后中止提取请求,但由于浏览器支持问题,不建议这样做。见 How do I cancel an HTTP fetch() request?

        2
  •  1
  •   PGT    7 年前

    你可以做一个 HEAD 如果不一定是 POST 你只想检查一下你是否会收到 400 500 串联误差

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

    示例:默认FETCH的HEAD请求使用GET方法,该方法 检索特定资源,但其他请求HTTP方法也可以 被使用。

    head请求与get请求一样,只是 响应为空。您可以在需要时使用这种请求 文件的元数据,您希望或需要文件的数据 运输。

    如果你被 请求,它是在服务器端控制的,您将收到服务器返回的任何内容,没有Web标准规定您可以告诉服务器不要发送任何内容,因此必须显式地编写服务器以允许这种行为。

    如果您不在乎,GC将在您退出这个特定范围后运行它的过程,并且 response 不再需要。你不需要 await 它或者其他任何东西,但它将在后台下载(保存在内存中),然后在GC运行时丢弃。

    推荐文章