Fetch 进度指示器

阅读时长 4 分钟读完

在前端开发中,我们常常需要向服务器请求数据。使用 fetch API 可以方便地进行网络请求。但是,当我们发送请求时,用户可能会感觉页面长时间没有响应或者看不到请求的进度。为了解决这个问题,我们可以加入进度指示器来展现请求的进度。

使用 fetch API

在介绍如何添加进度指示器之前,让我们快速回顾一下 fetch API 的使用。我们通常会使用以下代码来发送一个 GET 请求:

这里先通过 fetch(url) 发送 GET 请求,然后调用 .then() 处理响应结果。其中,第一个 .then() 将响应结果转换为 JSON 格式并返回,第二个 .then() 则将 JSON 数据输出到控制台。如果请求失败,则会调用 .catch() 处理错误。

添加进度指示器

我们可以使用 fetchBody 对象上的 body.getReader() 方法获取响应体 Reader。

reader 用于逐步读取响应体数据。在读取响应体数据时,我们可以通过 progress 事件监听请求的进度:

-- -------------------- ---- -------
----------
  --------- -- -
    ----- ------ - --------------------
    ----- ------------- - ---------------------------------
    --- -------------- - -
    --------------------------- --------------------- -
      -- ------------- -
        ------------------ ----------
        ------
      -
      -------------- -- -------------------
      ----- -------- - -------------- - -------------
      ---------------------- ------------------------
      ------ ---------------------------------
    --
  --

这里我们使用了 Content-Length 头部信息来获取响应体的长度,通过 receivedLength 来记录已接收数据量。在读取每一块数据时,更新 receivedLength 并计算出请求的百分比,最后输出进度信息到控制台。

实际应用

在实际应用中,我们通常需要将进度指示器展现给用户。下面是一个简单的例子:

-- -------------------- ---- -------
----- ----------- - ---------------------------------------
----------
  --------- -- -
    ----- ------ - --------------------
    ----- ------------- - ---------------------------------
    --- -------------- - -
    --------------------------- --------------------- -
      -- ------------- -
        ----------------------- - ------
        --------------------- - -----------
        ------
      -
      -------------- -- -------------------
      ----- -------- - -------------- - -------------
      ----------------------- - ----------- - ------
      --------------------- - ------------ - ------------------
      ------ ---------------------------------
    --
  --

在这个例子中,我们首先获取到 .progress-bar 元素,然后在读取每一块数据时,更新进度条的宽度和文本内容。当请求完成时,我们将进度条填满并显示完成信息。

总结

通过添加进度指示器,我们可以让用户更好地了解网络请求的进度,并提高用户体验。在使用 fetch API 时,我们可以通过获取响应体 Reader 和监听 progress 事件来实现进度指示器。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/26703

纠错
反馈