我正在尝试在我们的服务器上启动一个长时间运行(10-30秒)的作业并监视上的进度而不关闭连接。基本上,我上传了一个文件,并将进度传递回由换行符分隔的客户端。这是一个示例响应(每个换行延迟几毫秒):
01
23
48
60
73
87
96
我能够使用实验ReadableStream
和TextDecoder
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设置为blob
和arraybuffer
,每毫秒检查一次响应,但无法获得流式传输;它会在完成后打印完整的响应。