Skip to content

Commit

Permalink
Describe atEnd, and actually do something with any pending stuff we h…
Browse files Browse the repository at this point in the history
…ad saved but did not have a `\r\n` to complete it
  • Loading branch information
aredridel committed Oct 25, 2015
1 parent 3f558c4 commit 4fbd362
Showing 1 changed file with 18 additions and 0 deletions.
18 changes: 18 additions & 0 deletions index.js
Expand Up @@ -124,6 +124,24 @@ module.exports = {

this.push(data) // Just pass it on. for now.
next(); // Ready for next chunk.
}, function atEnd(next) {
// through2 takes 2 functions: forEachChunk and atEnd -- this is the second one,
// it gets called when the data incoming to through2 ends. Any clean-up or final
// actions we need to take before we stop getting called happen here.

// there's still a stream 'end' event that has to happen, after this stream will
// do no more. We don't want a race between our cleanup and the caller's last read
// or the end event. They may assume they got it all if end was emitted before this,
// but we had one more thing to do, so we have to tell through2 we're not just done,
// but done-done.
//
// If we had no atEnd, it would just send 'end' when we're done. But we had one thing
// pending.

// So if we had leftovers, let's put them in headers. This isn't correct, but
// vanishing data in a closure variable is no good either.
response.rawHeaders.push(partial);
next();
})).pipe(response);
// Whatever comes out of our header-splitting stream parser must be the
// body. Because that's what we designed, right?
Expand Down

0 comments on commit 4fbd362

Please sign in to comment.