Re: [streams] Real time source and skipping (#383)

We need a mechanism like I describe in #384.  Imagine something like this:

```
var latch = new TransformStream({
  latchedValue: null,
  pendingRead: null,

  transform: function(chunk, enqueue, done) {
    if (this.pendingRead) {
      var pr = this.pendingRead;
      this.pendingRead = null;
      pr(chunk);
      return;
    }

    this.latchedValue = chunk;
  },

  // this hook doesn't exist yet
  pull: function() {
    var self = this;
    return new Promise(function(resolve, reject) {
      if (self.latchedValue) {
        var lv = self.latchedValue;
        self.latchedValue = null;
        resolve(lv);
        return;
      }

      if (self.pendingRead) {
        reject('overlapping reads!');
        return;
      }

      self.pendingRead = resolve;
    });
  }
});

source.pipeThrough(latch).read(); // this triggers pull() function above
```

Although I see what you mean now.  The .pipeThrough() will pull values from source that wouldn't have to be produced under normal back pressure mechanisms.

Maybe a wrapped ReadableStream would work.  I don't have time to work through the pseudo code right now, unfortunately.  It seems that should be possible, though.

---
Reply to this email directly or view it on GitHub:
https://github.com/whatwg/streams/issues/383#issuecomment-126495267

Received on Thursday, 30 July 2015 21:26:31 UTC