Skip to content

Instantly share code, notes, and snippets.

@vijayjangid
Forked from jfsiii/fetch-chunked.js
Last active September 14, 2018 07:04
Show Gist options
  • Save vijayjangid/dfb147bec16d97a9191b506115317e98 to your computer and use it in GitHub Desktop.
Save vijayjangid/dfb147bec16d97a9191b506115317e98 to your computer and use it in GitHub Desktop.
Quick example of using fetch to parse a chunked response
var chunkedUrl = 'https://jigsaw.w3.org/HTTP/ChunkedScript';
fetch(chunkedUrl)
.then(processChunkedResponse)
.then(onChunkedResponseComplete)
.catch(onChunkedResponseError)
;
function onChunkedResponseComplete(result) {
console.log('-----------all done!----------');
console.log(result);
}
function onChunkedResponseError(err) {
console.error(err)
}
function processChunkedResponse(response) {
var text = '';
var reader = response.body.getReader()
var decoder = new TextDecoder();
return readChunk();
function readChunk() {
return reader.read().then(appendChunks);
}
function appendChunks(result) {
var chunk = decoder.decode(result.value || new Uint8Array, {stream: !result.done});
console.log('got chunk of', chunk.length, 'bytes')
console.log('---------chunk--------');
console.log(chunk);
text += chunk;
console.log('text so far is', text.length, 'bytes\n');
if (result.done) {
console.log('returning')
return text;
} else {
console.log('recursing')
return readChunk();
}
}
}
got chunk of 32768 bytes
text so far is 32768 bytes
recursing
got chunk of 32768 bytes
---------chunk--------
<chunk 1 here>
text so far is 65536 bytes
recursing
got chunk of 6664 bytes
---------chunk--------
<chunk 2 here>
text so far is 72200 bytes
recursing
got chunk of 0 bytes
---------chunk--------
text so far is 72200 bytes
returning
-----------all done!----------
This output will be chunked encoded by the server, if your client is HTTP/1.1
<snip>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment