callbag-catch-error

Callbag operator that catches errors thrown by pullable and listenable sources

Usage no npm install needed!

<script type="module">
  import callbagCatchError from 'https://cdn.skypack.dev/callbag-catch-error';
</script>

README

callbag-catch-error

Callbag operator to catch errors thrown by pullable or listenable sources.

If you wonder what this is all about, you should definitely check out the awesome Callbag standard for reactive and iterable programming.

.

Behavior

  • Data from pullable and listenable sources without errors are passed to sinks.
  • Errors thrown by pullable and listenable sources get caught.
  • Pullable sources stop emitting on error as expected.
  • Listenable sources continue emitting after error as expected.

.

Example 1: Pullable stream

const { flatten, fromIter, fromPromise, map, pipe } = require('callbag-basics');
const iterate = require('callbag-iterate');
const fetch = require('isomorphic-unfetch');
const catchError = require('callbag-catch-error');

pipe(
  fromIter([0, 1]),
  map(n => `https://swapi.co/api/people/${n}`),
  map(url =>
    fetch(url).then(resp => {
      if (!resp.ok) {
        throw new Error('404 Not Found');
      }

      return resp.json();
    }),
  ),
  map(request => fromPromise(request)),
  flatten,
  catchError(err => console.log(err.message)),
  iterate(data => console.log(data.name)),
);

/*

Logs the following:
- 404 Not Found

*/

.

Example 2: Listenable stream

const { flatten, forEach, fromPromise, interval, map, pipe, take } = require('callbag-basics');
const fetch = require('isomorphic-unfetch');
const catchError = require('callbag-catch-error');

pipe(
  interval(10000),
  take(2),
  map(n => `https://swapi.co/api/people/${n}`),
  map(url =>
    fetch(url).then(resp => {
      if (!resp.ok) {
        throw new Error('404 Not Found');
      }

      return resp.json();
    }),
  ),
  map(request => fromPromise(request)),
  flatten,
  catchError(err => console.log(err.message)),
  forEach(data => console.log(data.name)),
);

/*

Logs the following:
- 404 Not Found
- Luke Skywalker

*/