Yeah, like I mentioned writer.on('finish') is your friend in 0.10.
But in 0.8, you just have to know what kind of thing it is.
HTTP outgoing message streams emit 'finish' when they're completely done.
TCP, FS, and Zlib streams emit a 'close' when they've ended and closed
their associated resources.
Many streams let you pass a callback to the end() method, so you can
do something like this:
reader.pipe(writer, {end: false})
reader.on('end', function() {
writer.end(function() {
// now it's really over
})
})
Before 0.10, streams are inconsistent and terrible. Now they're at
least consistent :)
On Fri, May 3, 2013 at 10:12 AM, Nathan Rajlich <[email protected]> wrote:
> In node v0.10.x, you probably just want the "finish" event of the Writable
> stream.
>
>
> On Fri, May 3, 2013 at 9:25 AM, Benjamin Pasero <[email protected]>
> wrote:
>>
>> Thanks for the response Isaac. So I can not easily go to node 0.10 yet but
>> given the advantages, will push for it.
>>
>> I have one more question: I guess util.pump() was also never 100% safe
>> with regards to if the operation has completed or not? Even though I am
>> called in the callback, the write stream might not have written all data
>> yet, right? Is there any file specific event I can use to be pinged in case
>> the operation is done?
>>
>> Ben
>>
>>
>> On Friday, May 3, 2013 5:22:15 PM UTC+2, Isaac Schlueter wrote:
>>>
>>> Benjamin,
>>>
>>> The readable.end event is not actually a guarantee that the entire
>>> operation is completed, only that the "end" signal is being propagated
>>> to the writable. It could still take some time for the writable
>>> stream to finish writing all the data it's been given.
>>>
>>> In v0.10, writable streams all have a "finish" event, which tells you
>>> that the writable stream has received the end signal, and all of its
>>> data has been flushed. Prior to that, well, you kind of have to know
>>> what sort of stream you were dealing with. Most emit "close" at some
>>> point, but that's not guaranteed. There's no way to be sure in the
>>> general case. (One of many reasons for the streams refactor in 0.10.)
>>>
>>> If you are using pipe(), there's no need to call resume(). The pipe()
>>> call will make the stream flow for you. (Actually, prior to 0.10,
>>> readable streams started out in a free-flowing state, and pause() was
>>> not guaranteed to actually prevent "data" events.)
>>>
>>>
>>> On Fri, May 3, 2013 at 7:15 AM, Benjamin Pasero
>>> <[email protected]> wrote:
>>> > So taking your feedback using node 0.8, this is what it has to look
>>> > like?
>>> >
>>> > var readS = fs.createReadStream("fileA.txt");
>>> > var writeS = fs.createWriteStream("fileB.txt");
>>> >
>>> > readS.on("end", function() {
>>> > // Operation done
>>> > });
>>> >
>>> > readS.on("error", function() {
>>> > // Operation error
>>> > });
>>> >
>>> > writeS.on("error", function() {
>>> > // Operation error
>>> > });
>>> >
>>> > readS.resumse();
>>> >
>>> > Right?
>>> >
>>> > On Friday, May 3, 2013 10:44:39 AM UTC+2, Benjamin Pasero wrote:
>>> >>
>>> >> Hi,
>>> >>
>>> >> I am missing a good example for how to adopt stream.pipe for my old
>>> >> util.pump code when it comes to replacing a file with the contents of
>>> >> another file. As of today, I am using code similar to this:
>>> >>
>>> >> var readS = fs.createReadStream("fileA.txt");
>>> >> var writeS = fs.createWriteStream("fileB.txt");
>>> >> util.pump(readS, writeS, function(error)
>>> >> // Operation done
>>> >> });
>>> >>
>>> >> Now with stream.pipe I am uncertain if I am using it correctly. I am
>>> >> wondering if I have to call resume() or not before piping and I also
>>> >> wonder
>>> >> how to register a callback when the operation is fully completed. My
>>> >> attempt
>>> >> is this:
>>> >>
>>> >> var readS = fs.createReadStream("fileA.txt");
>>> >> var writeS = fs.createWriteStream("fileB.txt");
>>> >> readS.pipe(writeS);
>>> >>
>>> >> readS.on("end", function() {
>>> >> // Operation done
>>> >> });
>>> >>
>>> >> I would really appreciate if someone could tell me if this is the
>>> >> right
>>> >> way of doing it. As a related question, I am wondering if I should
>>> >> open the
>>> >> file with "w" or "r+". However, I think "w" is correct because I am
>>> >> replacing the file contents.
>>> >>
>>> >> Thanks,
>>> >> Ben
>>> >
>>> > --
>>> > --
>>> > 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.
>>
>>
>
>
--
--
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.