GithubHelp home page GithubHelp logo

Comments (9)

nordfjord avatar nordfjord commented on September 5, 2024 1

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

from flyd.

nordfjord avatar nordfjord commented on September 5, 2024 1

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)

from flyd.

nordfjord avatar nordfjord commented on September 5, 2024 1

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?

from flyd.

StreetStrider avatar StreetStrider commented on September 5, 2024

Afaik, flyd is push by it's nature.
Check for pull-stream, Highland.js (they're oriented to pull strategy) and most.js (starting cold).

from flyd.

sourcevault avatar sourcevault commented on September 5, 2024

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

from flyd.

sourcevault avatar sourcevault commented on September 5, 2024

Hi @nordfjord !

const read_hello = start.chain(()=> readFile('./hello.txt'));

readFile would return undefined not a flyd stream.

I can think of creating a wrapper and create .run method but there might be a clever trick.

from flyd.

sourcevault avatar sourcevault commented on September 5, 2024
  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 setTimeout as a hack.

from flyd.

sourcevault avatar sourcevault commented on September 5, 2024

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 setTimeout to delay [1].

@nordfjord are you familiar with mostjs ?

https://github.com/cujojs/most

It runs / delays all side effects till all the .maps etc are defined, its said to be lazy.

flyd is more 'active', but I am trying to find a way to make it lazy, I hope I am making some sense.

from flyd.

sourcevault avatar sourcevault commented on September 5, 2024

It is more of a intellectual curiosity when you corner me like that @nordfjord ☺️.

I have no immediate usecase, most streams work fine on node events like fs.readFile.

But then things like fs.watch flyd is a better choice.

I was hoping if there was a way to make flyd work for all most.js usecases.

I have looked at some libuv internals and using setTimeout 0 with flyd should be fine.

libuv runs everything with setTimeout 0 in the next tick, making it lazy so to speak.

from flyd.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.