title: rxjs zip is not lazy?
body: <p>I 've removed the boilerplate to get to the point</p>
  
  <p><code>// a.js</code></p>
  
  <pre class="lang-js prettyprint-override"><code>// My observables from stream and event
  this.a = Rx.Node.fromStream(this.aStream());
  this.itemSource = Rx.Observable.fromEvent(ee, 'addItem');
  
  // Zip 'em
  this.itemcombo = Rx.Observable.zip(this.a, this.itemSource, function (s1, s2) {
      return {item: s2, a: s1.toString()};
  });
  
  // Streams the lowercase alphabet
  rb.prototype.aStream = function aStream() {
  var rs = Readable();
  
  var c = 97;
  rs._read = function () {
      rs.push(String.fromCharCode(c++));
      console.log('Hit!');
      if (c &gt; 'z'.charCodeAt(0)) {
          rs.push(null);
      }
  };
  
  return rs;
  };
  </code></pre>
  
  <p><code>// b.js</code> (requires the module exported above)</p>
  
  <pre><code>rb.enqueue('a'); // The method simply does an ee.emit('addItem', ...)  in the module to trigger the itemSource observable
  </code></pre>
  
  <p><strong>What I expected to see:</strong></p>
  
  <p><code>{item: 'a', a: 'a'}</code> printed in the console</p>
  
  <p><strong>What happened:</strong></p>
  
  <p><code>Hit!</code> was printed 24 times before <code>{item: 'a', a: 'a'}</code>. This means that <code>zip</code> took all the values from <code>aStream</code>, buffered them and then did what it was supposed to do.</p>
  
  <p>How do I get the same functionality <code>zip</code> offers but lazily? My goal is to use an infinite stream/observable and zip it with a finite (async) one.</p>
  
  <p><strong>Edit</strong></p>
  
  <p>See/Edit it via runnable: <a href="http://runnable.com/U_3c994wlwQ2Z73u/so-q-rx-zip-for-node-js-and-hello-world" rel="nofollow">RX Zip test</a> <strong>Edit 2</strong> Code updated based on answer -> no output now.</p>