关于后端进度条的实现
java代码部分
1 2 3 4 5 6 7 8 9 |
for (int i =0;i<10;i++) {
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
writer.print(i);
writer.flush();
} |
重点写一个trunk后要及时flush
js部分
得益于fetch api中关于getReader的能力 可以让我们及时读取每个分片(trunk)的数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
fetch(require.toUrl("$UI/demo/mock.j")).then(function (response) {
let reader = response.body.getReader();
let decoder = new TextDecoder();
return readData();
function readData() {
return reader.read().then(function (data) {
var value = data.value,done = data.done;
value = new TextDecoder("utf-8").decode(value);
console.log(value);
if (done) {
console.log('Stream complete');
return;
}
return readData();
});
}
}); |
效果如下:
