Giter Club home page Giter Club logo

callbag-create's Introduction

callbag-create

Creates a new Callbag given an optional producer that dictates how to emit values and complete the Callbag.

npm install callbag-create

Examples

With a Producer

const create = require('callbag-create');
const forEach = require('callbag-for-each');
const pipe = require('callbag-pipe');

pipe(
  create((next, error, done) => {
    next('a');
    next('b');
    done();
    next('c');
  }),
  forEach((v) => {
    console.log(v);
  })
);
// logs 'a', 'b', then completes.
// Calling next('c') does nothing since done() was called and terminated the callbag

With a Producer returning a clean-up logic

const create = require('callbag-create');
const forEach = require('callbag-for-each');
const pipe = require('callbag-pipe');

const unsubscribe = pipe(
  create((next, error, done) => {
    const id = setTimeout(() => {
      next('a');
      done();
    }, 1000);

    return () => {
      clearTimeout(id);
    };
  }),
  subscribe({
    next(v) {
      console.log(v);
    },
    complete() {
      console.log('Done()');
    }
  })
);

unsubscribe();
// logs nothing since it was unsubscribed before emitting and the timeout is cleared

With a Noop Producer

Equivalent to xstream and RxJs never(). Never emits the completion message.

const create = require('callbag-create');
const forEach = require('callbag-for-each');
const pipe = require('callbag-pipe');

pipe(
  create(() => {}),
  forEach((v) => {
    console.log(v); // void
  })
);

Without a Producer

Equivalent to xstream and RxJs empty(). Emits no value and immediatelly emits the completion message.

const create = require('callbag-create');
const subscribe = require('callbag-subscribe');
const pipe = require('callbag-pipe');

pipe(
  create(),
  subscribe({
    next(v) {
      console.log(v);
    },
    complete() {
      console.log('Done()');
    }
  }) // => Done()
);

callbag-create's People

Contributors

andarist avatar franciscotln avatar hypnosphi avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

callbag-create's Issues

Make share(create((sink) => {})) work for immediate sinking

@staltz The case is:

const src = share(create(function producer(sink) {
  sink(1, 'A');
  sink(1, 'B');
}));

forEach(v => {
  console.log('OBS 1', v);
})(src);

forEach(v => {
  console.log('OBS 2', v);
})(src);

* Current behaviour:
// => OBS1 A
// => Error: talkback is not a function

* Expected behaviour (as RxJs):
// => OBS1 A
// => OBS1 B
OBS 2 never receives values.

If I wrap the body of the "producer" function into setTimeout(() => {}, 0); then it works as expected because all the sinks are hand-shaked otherwise the producer starts sinking before the sink gets the chance to receive the talkback function. It might be something in the implementation of create itself so before creating a PR to share I'd like to discuss it here.

Any thoughts if this is a share issue or create issue?

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.