RpcObservables Properties

RpcObservables are built with the idea that we should make the minimum amount of JSONRPC calls to achieve what we want in our dapp.

Observables are cold

The underlying JSONRPC method is only called if there's at least one subscriber.

import { balanceOf$ } from '@parity/light.js';

const myObs$ = balanceOf$('0x123');
// Observable created, but `eth_getBalance` not called yet
const subscription = myObs$.subscribe(console.log);
// `eth_getBalance` called for the 1st time

// Some other code...

subscription.unsubscribe();
// `eth_getBalance` stops being called

Observables are PublishReplay(1)

Let's take blockNumber$() which fires blocks 7, 8 and 9, and has 3 subscribers that don't subscribe at the same time.

We have the following marble diagram (^ denotes when the subscriber subscribes).

blockNumber$(): -----7----------8------9-----|
subscriber1:    -^---7----------8------9-----|
subscriber2:    ------------^7--8------9-----|
subscriber3:    --------------------------^9-|

Note: the default behavior for Observables is without PublishReplay, i.e.

blockNumber$(): -----7----------8------9-----|
subscriber1:    -^---7----------8------9-----|
subscriber2:    ------------^---8------9-----|
subscriber3:    --------------------------^--|

But Observables in this library are PublishReplay(1). Read more about PublishReplay.

Underlying API calls are not unnecessarily repeated

const obs1$ = balanceOf$('0x123');
const obs2$ = balanceOf$('0x123');

obs1$.subscribe(console.log);
obs1$.subscribe(console.log);
obs2$.subscribe(console.log);
// Logs 3 times the balance
// But only one call to `eth_getBalance` has been made

const obs3$ = balanceOf$('0x456');
// Logs a new balance, another call to `eth_getBalance` is made

Underlying PubSub subscriptions are dropped after 2 seconds with no subscribers

import { blockNumber$ } from '@parity/light.js';

const myObs$ = blockNumber$();
console.log(blockNumber$.frequency); // [onEveryBlock$]
// Note: onEveryBlock$ creates a pubsub on `eth_blockNumber`

const subscription = myObs$.subscribe(console.log);
// Creates a pubsub subscription

// Some other code...

subscription.unsubscribe();
// Pubsub subscription is dropped if the observable remains without subscribers for two seconds

results matching ""

    No results matching ""