I'm currently trying to implement a simple offline/online sync mechanism using observables.
Basically, I have two observables:
- Connection observable: The first observable gives me the information whether or not there is an internet connections. It emits when the network state changes
- Data observable: The second observable has the data that needs to synced. It emits when there is new data to be synced
What I want to achieve is to combine the above observables so that:
- As long as the connection state is
false
, the combined observable shouldn't emit. In this case, the data observable should retain its state - As long as the connection state is
true
, the combined observable should emit every time there is data in the data observable - If the connection state switches from
false
totrue
, it should emit for every value on the data observable
A small example that currently uses filter and combineLatest can be found here: https://codesandbox.io/s/offline-sync-s5lv49?file=/src/index.js
Unfortunately, this doesn't behave as intended at all.
Is there any operator to achieve the required behavior? As an alternative, I could maybe poll the connection status of course and emit every X seconds. But ideally, I'd like a clean combination of Observables, though I'm a bit lost with what operator makes most sense.
To clear the idea up: I need to sync all data, not just the latest. So the data observable should buffer the data.