读取流式响应

时间:2018-05-08 21:29:08

标签: javascript browser stream xmlhttprequest

我正在尝试在我们的服务器上启动一个长时间运行(10-30秒)的作业并监视上的进度而不关闭连接。基本上,我上传了一个文件,并将进度传递回由换行符分隔的客户端。这是一个示例响应(每个换行延迟几毫秒):

01
23
48
60
73
87
96

我能够使用实验ReadableStreamTextDecoder api来实现这一点,但我正在寻找更兼容浏览器的方式。这是我的代码:

fetch('/thing/').then(r => {
  let reader = r.body.getReader('byob')

  const doIt = () => {
    reader.read().then(({done, value}) => {
      value = new TextDecoder("utf-8").decode(value)

      if (done) {
        clearInterval(interval)
      }

      if (value) {
        console.log(`${value}% done`)
      }
    })
  }

  const interval = setInterval(doIt, 10)
})

我已经尝试将XMLHttpRequest上的responseType设置为blobarraybuffer,每毫秒检查一次响应,但无法获得流式传输;它会在完成后打印完整的响应。

0 个答案:

没有答案