>
> readable is emitted after you've actually started reading.
>

That's not what it says in the
docs<http://nodejs.org/api/stream.html#stream_event_readable>
.

###
Event: 'readable'
When there is data ready to be consumed, this event will fire.
When this event emits, call the read() method to consume the data.
###

Calling stream.read *before* you get the "readable" event is totally
counterintuitive.

--
Michael Jackson
@mjackson

In your example, you dont ever `response.read()`, so no readable event
> is ever emitted.
>
> As you said, streams start in paused state and ready to be read.
>
> On 03/25/13 22:28, Michael Jackson wrote:
> > Is it correct to assume that a Readable won't emit the "readable" event
> > until you're registered for it?
> >
> > Reading through the streams2 docs, I was under the impression that all
> > streams start out paused and don't start emitting data until you add
> > either a "data" (for old streams) or a "readable" listener. For new
> > streams, this should mean that they don't emit "readable" until at least
> > one listener is registered. Otherwise we still need to do some buffering
> > in order to capture all the data.
> >
> > For example, this code misses the readable event on node 0.10:
> >
> >     var http = require('http');
> >
> >     http.get('http://www.google.com', function (response) {
> >       console.log('got response with status ' + response.statusCode);
> >
> >       setTimeout(function () {
> >         response.on('readable', function () {
> >           console.log('readable');
> >         });
> >
> >         response.on('end', function () {
> >           console.log('end');
> >         });
> >       }, 5);
> >     });
> >
> > Here's my shell session:
> >
> > $ node -v
> > v0.10.0
> > $ node http-test.js
> > got response with status 200
> > $
> >
> > Is this the correct behavior?
> >
> > --
> > Michael Jackson
> > @mjackson
> >
> >
> > On Thu, Mar 21, 2013 at 4:27 PM, Isaac Schlueter <[email protected]
> > <mailto:[email protected]>> wrote:
> >
> >     re old-mode
> >
> >     Yes, that's fine.  If you just want to get all the data asap, use
> >     on('data', handler).  It'll work great, and it's still very fast.
> >     pause()/resume(), the whole bit.  (The difference is that it won't
> >     emit data until you're listening, and pause() will *actually* pause.)
> >
> >
> >     Re read(cb)
> >
> >     It's problematic for reasons that I've discussed all of the places
> >     where it's been brought up.  That horse is dead, let's stop beating
> >     it.  (There were a few other proposals as well, btw.  Reducibles and
> >     some other monadic approaches come to mind.)
> >
> >
> >     Re pipe() vs looping around read() vs custom Writable vs on('data')
> >
> >     Whatever works for your case is fine.  It's flexible on purpose, and
> >     allows more types of consumption than streams1, and creating custom
> >     writables is easier than it was in streams1.
> >
> >     If you find something that the API can't do for you, or find yourself
> >     doing a lot of backflips or overriding a lot of methods to get your
> >     stuff working, then let's chat about it in a github issue.  You might
> >     be missing something, or you might have found a genuine shortcoming
> in
> >     the API.
> >
> >
> >
> >     On Thu, Mar 21, 2013 at 2:01 PM, Sigurgeir Jonsson
> >     <[email protected] <mailto:[email protected]>>
> >     wrote:
> >     > Thanks for all the answers. I almost forgot to look back at this
> >     thread as
> >     > the custom writeStreams have exceeded the high expectation I had
> >     already for
> >     > Streams 2.
> >     > For me, the reference manual was a little confusing, as there are
> >     complete
> >     > examples on using the read method, no mention of  "reading"
> through a
> >     > writeStream endpoint.
> >     >
> >     > Marco, I agree that that read has more detailed control of minimum
> >     incoming
> >     > content.  However I wonder if it would be more efficient to default
> >     > pipe.chunkSize to a "lowWatermark" of the receiver (if defined).
> >     This
> >     > lowWatermark could be adjusted dynamically and the callback in the
> >     writable
> >     > should keep sequence of events under control?
> >     >
> >     > Anyway, thanks Node team, I'm very impressed!
> >     >
> >     >
> >     >
> >     >
> >     >
> >     >
> >     >
> >     >
> >     >
> >     >
> >     >
> >     > On Wednesday, March 20, 2013 4:45:32 AM UTC-4, Marco Rogers wrote:
> >     >>
> >     >> @Nathan's response is right. Creating a writable stream is
> >     preferable in
> >     >> most cases. But I wanted to add a little context to that. If
> >     you're dealing
> >     >> with a base readable stream, it's just pushing chunks of data at
> >     you off the
> >     >> wire. Your first task is to collect those chunks into meaningful
> >     data. So
> >     >> IMO the reason creating a writable stream is preferable is
> because it
> >     >> prompts you not just read off the stream, but to create semantics
> >     around
> >     >> what the new stream is supposed to be. The api reflects this
> >     opinion and
> >     >> that's why creating writable streams feels like the more natural
> >     way, and
> >     >> the ugliness of dealing with read() is wrapped up in the pipe()
> >     method. It
> >     >> was kind of designed that way.
> >     >>
> >     >> But the read() api was also designed for a use case. It's meant
> >     to handle
> >     >> low/high water marks effectively, as well as enable more
> >     optimized special
> >     >> parsing by reading off specific lengths of chunks. These were
> >     things that
> >     >> people kept needing, but the old api didn't support well. If you
> were
> >     >> writing a library for a special parser, you might write a custom
> >     Writable
> >     >> stream and inside it you would be using the read(n) api to
> >     control *how* you
> >     >> read data off the socket. I hope that makes sense.
> >     >>
> >     >> :Marco
> >     >>
> >     >> On Monday, March 18, 2013 11:06:48 AM UTC-7, Sigurgeir Jonsson
> wrote:
> >     >>>
> >     >>> The new streams have excellent support for high/low watermarks
> and
> >     >>> auto-pausing/resuming, but the documentation confuses me a
> little...
> >     >>> particularly the read method.
> >     >>>
> >     >>> When I read the new docs for the first time I was under the
> >     impression
> >     >>> that the optimal way to become a user of a stream is to write
> >     loops around
> >     >>> the read functio.  However in practice I find myself simply
> >     writing custom
> >     >>> writeStreams and use the callback to control upstream pressure
> >     (in addition
> >     >>> to source Watermarks if needed).   Here is an example where I
> >     move the
> >     >>> output to a queue that executes a custom function in parallel
> (i.e.
> >     >>> uploading to a database)
> https://gist.github.com/ZJONSSON/5189249
> >     >>>
> >     >>> Are there any benefits to using the read method directly on a
> >     stream vs.
> >     >>> piping to a custom Writable stream?
> >     >
> >     > --
> >     > --
> >     > Job Board: http://jobs.nodejs.org/
> >     > Posting guidelines:
> >     >
> https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
> >     > You received this message because you are subscribed to the Google
> >     > Groups "nodejs" group.
> >     > To post to this group, send email to [email protected]
> >     <mailto:[email protected]>
> >     > To unsubscribe from this group, send email to
> >     > [email protected]
> >     <mailto:nodejs%[email protected]>
> >     > For more options, visit this group at
> >     > http://groups.google.com/group/nodejs?hl=en?hl=en
> >     >
> >     > ---
> >     > You received this message because you are subscribed to the Google
> >     Groups
> >     > "nodejs" group.
> >     > To unsubscribe from this group and stop receiving emails from it,
> >     send an
> >     > email to [email protected]
> >     <mailto:nodejs%[email protected]>.
> >     > For more options, visit https://groups.google.com/groups/opt_out.
> >     >
> >     >
> >
> >     --
> >     --
> >     Job Board: http://jobs.nodejs.org/
> >     Posting guidelines:
> >     https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
> >     You received this message because you are subscribed to the Google
> >     Groups "nodejs" group.
> >     To post to this group, send email to [email protected]
> >     <mailto:[email protected]>
> >     To unsubscribe from this group, send email to
> >     [email protected]
> >     <mailto:nodejs%[email protected]>
> >     For more options, visit this group at
> >     http://groups.google.com/group/nodejs?hl=en?hl=en
> >
> >     ---
> >     You received this message because you are subscribed to the Google
> >     Groups "nodejs" group.
> >     To unsubscribe from this group and stop receiving emails from it,
> >     send an email to [email protected]
> >     <mailto:nodejs%[email protected]>.
> >     For more options, visit https://groups.google.com/groups/opt_out.
> >
> >
> >
> > --
> > --
> > Job Board: http://jobs.nodejs.org/
> > Posting guidelines:
> > https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
> > You received this message because you are subscribed to the Google
> > Groups "nodejs" group.
> > To post to this group, send email to [email protected]
> > To unsubscribe from this group, send email to
> > [email protected]
> > For more options, visit this group at
> > http://groups.google.com/group/nodejs?hl=en?hl=en
> >
> > ---
> > You received this message because you are subscribed to the Google
> > Groups "nodejs" group.
> > To unsubscribe from this group and stop receiving emails from it, send
> > an email to [email protected].
> > For more options, visit https://groups.google.com/groups/opt_out.
> >
> >
>
>

-- 
-- 
Job Board: http://jobs.nodejs.org/
Posting guidelines: 
https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
You received this message because you are subscribed to the Google
Groups "nodejs" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/nodejs?hl=en?hl=en

--- 
You received this message because you are subscribed to the Google Groups 
"nodejs" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to