Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/staltz/callbag-share

👜 Callbag operator that broadcasts a single source to multiple sinks
https://github.com/staltz/callbag-share

Last synced: 26 days ago
JSON representation

👜 Callbag operator that broadcasts a single source to multiple sinks

Awesome Lists containing this project

README

        

# callbag-share

Callbag operator that broadcasts a single source to multiple sinks. Does reference counting on sinks and starts the source when the first sink gets connected, similar to RxJS [`.share()`](https://www.learnrxjs.io/operators/multicasting/share.html). Works on either pullable or listenable sources.

`npm install callbag-share`

## example

Share a listenable source to two listeners:

```js
const interval = require('callbag-interval');
const observe = require('callbag-observe');
const share = require('callbag-share');

const source = share(interval(1000));

observe(x => console.log(x))(source); // 0
// 1
// 2
// 3
// ...

setTimeout(() => {
observe(x => console.log(x))(source); // 3
// 4
// 5
// ...
}, 3500);
```

Share a pullable source to two pullers:

```js
const fromIter = require('callbag-from-iter');
const share = require('callbag-share');

const source = share(fromIter([10,20,30,40,50]));

let talkback;
source(0, (type, data) => {
if (type === 0) talkback = data;
else console.log('a' + data);
});

source(0, (type, data) => {
if (type === 1) console.log('b' + data);
});

talkback(1); // a10
// b10
talkback(1); // a20
// b20
```