various steps in `[[finish]]` should wait for buffer depletion.

The `finishedPromise` and `readablePromise` should only be fulfilled once the buffer is depleted