-
Notifications
You must be signed in to change notification settings - Fork 84
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Can flyd streams be made lazy ? #198
Comments
you could maybe do something like: const start = flyd.stream();
const readFile = (file)=> {
const s = flyd.stream();
fs.readFile(file, s);
}
const read_hello = start.chain(()=> readFile('./hello.txt'));
read_hello.map(fileContents => console.log(fileContents));
start(true); |
Afaik, flyd is push by it's nature. |
@StreetStrider it should be possible to express a push stream as a pull stream given that their operations are similar. I do not know what the theoretical equivalence law is. @nordfjord yep - that seems like a cool workaround :D using chains ! Thank you both ! |
Hi @nordfjord ! const read_hello = start.chain(()=> readFile('./hello.txt'));
I can think of creating a wrapper and create |
var flyd = require('flyd')
var fs = require('fs')
readfile = function(name){
var s = flyd.stream()
var F = fs.readFile(name, function(err, data){return s(data.toString())})
setTimeout(F, 0);
return s;
};
stream = readfile('file1.txt');
stream.map(function(data){
console.log(data);
}); Using |
Hey @sourcevault ! Glad you found a solution! I think you might be able to make a generic nodeback -> Stream function. function fromNode(fn) {
return (...args)=> {
const s = stream()
fn(...args, (err, data)=> s(data))
return s
}
} Then you could use that as: const readFile = fromNode(fs.readFile)
readFile('file1.txt')
.map(x => x.toString())
.map(console.log) |
Hallo @nordfjord !! 😀 const readFile = fromNode(fs.readFile)
readFile('file1.txt') // <-- 1) This still runs immediately
.map(x => x.toString()) // <-- 2) This runs after [1]
.map(console.log) I don't think there is a way without using @nordfjord are you familiar with https://github.com/cujojs/most It runs / delays all side effects till all the flyd is more 'active', but I am trying to find a way to make it |
don't worry, I understand what you're trying to accomplish. I'm curious about your use case though, what use case do you have that requires lazy streams? |
It is more of a intellectual curiosity when you corner me like that @nordfjord I have no immediate usecase, most streams work fine on But then things like I was hoping if there was a way to make flyd work for all I have looked at some
|
when you have nodejs style API, you have this:
Is there some magic I can do to turn the stream upside down to make it lazy ?
Cheers !
The text was updated successfully, but these errors were encountered: