promises only work if everything is a promise. Streams only work if
everything is a stream.

Making everything a stream is cool because streams represent the endless
flow of data through your entire program. It's basically doing reactive
programming.

Making everything a stream instead of a promise has the advantage of most
things in node core are already streams. Domains work cleanly with streams,
etc.

Oh and streams are composable! You write a stream I can use it with any of
my streams. You write a promise, I have to use promises everywhere or
ignore all your work.

On Wed, Oct 3, 2012 at 10:38 AM, Mariusz Nowak <[email protected]> wrote:

> Raynos, Streams are very powerful and I agree with that, but as your
> examples shown you just cannot take asynchronous functions and configure
> them with streams directly, so they're not that helpful when dealing
> with asynchronicity that's not stream based.
>
> You're point is not against promises but rather against typical
> asynchronous CPS. Question is whether you can (or whether it makes sense)
> to address all asynchronicity use cases with Streams, I doubt whether it
> make sense.
>
> You made a one good point about writing to file while, having already some
> files ready, this is where indeed streams win, I was thinking about it
> recently. Currently in deferred implementation promise is an event-emitter,
> with 0.7 I want to push it forward so it can also be stream (both readable
> and writable). I've got use cases where it's beneficial to have promises
> that are also streams.
>
> Anyway I find a lot of great stuff in your examples. Thanks for sharing
> that!
>
> On Wednesday, October 3, 2012 7:11:18 PM UTC+2, Raynos wrote:
>
>> The other feature is that this is all in node core. Isaacs 0.9 streams
>> will have the notion of a transform stream.
>>
>> We can also petition node core to make fs.createReadStream(dirname) work
>> because a directory is just a fd with a list of files so it should work.
>>
>> Then the program becomes
>>
>> ```
>> var fs = require("fs")
>>     , d = require("domain").create()
>>     , Transform = require("stream").Transform
>>
>> d.run(function () {
>>     var onlyJsFiles = new Transform()
>>         , mapToFiles = new Transform()
>>         , addNewLine = new Transform()
>>
>>     onlyJsFiles._transform = function(fileName, output, end) {
>>         if (fileName.slice(-3) === ".js" && (fileName !== "lib.js")) {
>>             output(fileName)
>>         }
>>         end()
>>     }
>>
>>     mapToFiles._transform = function(fileName, output, end) {
>>         fs.readFile(fileName, end)
>>     }
>>
>>     addNewLine._transform = function (file, output, end) {
>>         end(null, file + "\n")
>>     }
>>
>>     fs.createReadStream(__dirname)
>>         .pipe(onlyJsFiles)
>>         .pipe(mapToFiles)
>>         .pipe(addNewLine)
>>         .pipe(fs.createWriteStream(__**dirname + "/lib.js"))
>> })
>>
>> d.on("error", function ignoreIt() {})
>> ```
>>
>> On Wed, Oct 3, 2012 at 9:39 AM, Jake Verbaten <[email protected]> wrote:
>>
>>> Streams are the better abstraction for that.
>>>
>>> Notice that with the streams version you can actually start writing to
>>> the disk once you've successfully loaded a single file.
>>>
>>> ```
>>> var chain = require("chain-stream")
>>>     , fs = require("fs")
>>>     , DirStream = require("dir-stream") // to be written
>>>     , d = require("domain").create()
>>>
>>> d.run(function () {
>>>     chain(DirStream(__dirname))
>>>         .filter(function (fileName) {
>>>             return (file.slice(-3) === ".js" && (file !== "lib.js"))
>>>         })
>>>         .map(readFile)
>>>         .pipe(fs.createWriteStream(__**dirname + "/lib.js"))
>>> })
>>>
>>> d.on("error", function ignoreIt() {})
>>> ```
>>>
>>> On Wed, Oct 3, 2012 at 1:11 AM, Mariusz Nowak <[email protected]>wrote:
>>>
>>>> Raynos, I have a feeling that you are comparing apples and oranges.
>>>> Streams are awesome, Promises are awesome but it's not the same, and not
>>>> every use case can be addressed on equal level by both of them.
>>>>
>>>> From my experience there can be promises that are also a streams, but
>>>> among them are also promises that fulfill before stream ends. There can
>>>> also be promises that are not streams, of course you may represent them as
>>>> stream but if they bring no value and just emit 'end', it doesn't fit well
>>>> stream concept, does it?
>>>>
>>>> Same way you can just use callbacks instead of promises, but the point
>>>> is that promises gives you better abstraction, so it's easier to construct
>>>> complicated flow with it and maintain it. See this:
>>>> https://github.com/medikoo/**deferred#promises-approach<https://github.com/medikoo/deferred#promises-approach>How
>>>>  would you write it with streams instead? Would it be more friendly than
>>>> callbacks version: 
>>>> https://github.com/**medikoo/deferred#plain-nodejs<https://github.com/medikoo/deferred#plain-nodejs>?
>>>>
>>>> On Wednesday, October 3, 2012 6:40:02 AM UTC+2, Raynos wrote:
>>>>>
>>>>> https://github.com/Raynos/**prom**ise-stream<https://github.com/Raynos/promise-stream>
>>>>>
>>>>> If you want to turn a stream into a promise you can.
>>>>>
>>>>> This mainly illustrates how streams and promises are similar for those
>>>>> that like promises.
>>>>>
>>>>> It also shows a comparison between how you flow async code through
>>>>> promises and streams
>>>>>
>>>>>  --
>>>> Job Board: http://jobs.nodejs.org/
>>>> Posting guidelines: https://github.com/joyent/**node/wiki/Mailing-List-
>>>> **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
>>>> nodejs+un...@**googlegroups.com
>>>>
>>>> For more options, visit this group at
>>>> http://groups.google.com/**group/nodejs?hl=en?hl=en<http://groups.google.com/group/nodejs?hl=en?hl=en>
>>>>
>>>
>>>
>>  --
> 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
>

-- 
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

Reply via email to